参考: call和apply的模拟实现
1. call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
/*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。
2.2 对举例一进行改造:
var foo = { value: 1, bar:function () { console.log(this.value); } }; foo.bar(); // 1
对于改造的对象,给对象添加了一个属性,这个属性是一个方法,方法指向bar
总结: 所以我们模拟的步骤可以分为:
1. 将函数设为对象的属性 2. 执行该函数 3. 删除该函数
按照举例一,模拟步骤:
// 第一步 foo.fn = bar // 第二步 foo.fn() // 第三步 delete foo.fn