參考: 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