JavaScript模擬call和apply的實現

  參考: call和apply的模擬實現segmentfault

  1. call:調用一個對象的一個方法,用另外一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法。
app

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

   2.1 . 舉例一說明:函數

var foo = {
    value: 1
};
function bar() {
    console.log(this.value);
}
bar.call(foo); // 1

  備註: 1. bar函數執行了; 2. bar函數中的this指向了foo。this

  2.2 對舉例一進行改造:spa

var foo = {
    value: 1,
    bar:function () {
        console.log(this.value);
    }
};
foo.bar(); // 1

  對於改造的對象,給對象添加了一個屬性,這個屬性是一個方法,方法指向barcode

 

  總結: 因此咱們模擬的步驟能夠分爲:對象

1. 將函數設爲對象的屬性

2. 執行該函數

3. 刪除該函數

  按照舉例一,模擬步驟:blog

// 第一步
foo.fn = bar
// 第二步
foo.fn()
// 第三步
delete foo.fn
相關文章
相關標籤/搜索