//实现call方法
Function.prototype.myCall = function (context, ...rest) {
//对于context为null或者没传时的处理
context = context || window;
// 将当前的this 暂存于context对象中。此时的this为封装类将来要绑定的函数的原型对象,下面调用的getName方法挂在this.prototype上。
context.fn = this;
// 以context对象上的属性的方式执行函数(此时触发隐式绑定)
let ret = context.fn(...rest);
//将挂在上面的中间属性fn 删除。其作用只是为了帮助我们改变this,同时执行函数所用。
delete context.fn;
return ret;
}
let obj = {
name: 1
}
function getName(a, b, c) {
return this;
}
let ret = getName.myCall(obj, 2, 3, 4);
console.log(ret);