JavaScript模拟call和apply的实现

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