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