快速掌握javascript的apply()和call()方法

yajie_china發表於2018-04-23

導讀:

    1.什麼是apply()和call()

    2.什麼時候使用apply()和call()

    3.apply()和call()的唯一不同

1.什麼是apply()和call()

    <1.apply()和call()是函式自帶的兩個函式,二者作用一致。

    <2.作用:改變方法中的this。例:say.call(小怪獸),將方法say()中的this指向物件‘小怪獸’


2.什麼時候使用apply()和call()

在js物件導向程式設計中,我們經常這樣定義:

function cat() {
}
cat.prototype = {
    food : 'jerry',
    say  : function () {
        console.log('I like '+ this.food);
    }
};
let cat_tom = new cat();
cat_tom.say();             // I like jerry
假如:有一個物件 mouse = {food:'tom'}
我們不想對它mouse重新定義say方法,那麼我們可以通過call或apply來使用cat_tom的say方法,如下:
let mouse = {food:'tom'};
cat_tom.say.call(mouse);     //I like tom
cat_tom.say.apply(mouse);    //I like tom
所以,可以看出call和apply是為了動態改變this而出現的
當一個object沒有某個方法,但是其他的物件有,我們可以藉助call或apply用其它物件的方法來操作。

3.apply()和call()的唯一區別

  • apply()把引數打包成Array再傳入;
  • call()把引數按順序傳入。
比如呼叫Math.max(1, 2, 3),分別用apply()和call()實現如下:
Math.max.apply(null, [1, 2, 3]);  // 3
Math.max.call(null, 1, 2, 3);     // 3



相關文章