在Mozilla的官網(wǎng)中對(duì)于call()的介紹是:
Call() 參數(shù)
thisArg
Javascript中的call()方法
先不關(guān)注上面那些復(fù)雜的解釋,一步步地開(kāi)始這個(gè)過(guò)程。
Call()方法的實(shí)例
于是寫了另外一個(gè)Hello,World:
接著,我們?cè)賮?lái)看另外一個(gè)例子。
print.call(obj, "Hello", "World");
只是在這里,我們傳進(jìn)去的還是一個(gè)undefined,因?yàn)樯弦粋€(gè)例子中的undefined是因?yàn)樾枰獋鬟M(jìn)一個(gè)參數(shù)。這里并沒(méi)有真正體現(xiàn)call的用法,看看一個(gè)更好的例子。
var h={p1:"hello", p2:"world", print:print};
h.print("fd");
var h2={p1:"hello", p2:"world"};
print.call(h2, "nothing");
call就用就是借用別人的方法、對(duì)象來(lái)調(diào)用,就像調(diào)用自己的一樣。在h.print,當(dāng)將函數(shù)作為方法調(diào)用時(shí),this將指向相關(guān)的對(duì)象。只是在這個(gè)例子中我們沒(méi)有看明白,到底是h2調(diào)了print,還是print調(diào)用了h2。于是引用了Mozilla的例子
    if (price < 0)
        throw RangeError('Cannot create product "' + name + '" with a negative price');
    return this;
}
function Food(name, price) {
    Product.call(this, name, price);
    this.category = 'food';
}
Food.prototype = new Product();
var cheese = new Food('feta', 5);
console.log(cheese);
var h2= function(no){
    this.p1 = "hello";
    this.p2 = "world";
    print.call(this, "nothing");
};
h2();
這里的h2作為一個(gè)接收者來(lái)調(diào)用函數(shù)print。正如在Food例子中,在一個(gè)子構(gòu)造函數(shù)中,你可以通過(guò)調(diào)用父構(gòu)造函數(shù)的 call 方法來(lái)實(shí)現(xiàn)繼承。
至于Call方法優(yōu)點(diǎn),在《Effective JavaScript》中有介紹。
1.使用call方法自定義接收者來(lái)調(diào)用函數(shù)。
2.使用call方法可以調(diào)用在給定的對(duì)象中不存在的方法。
3.使用call方法可以定義高階函數(shù)允許使用者給回調(diào)函數(shù)指定接收者。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注