模拟Function.prototype.call 的实现原理来理解call
Function.prototype.myCall = function(context){
// 1.让fn中的 this 关键字变为context 的值
var _this = eval(this.toString().replace('this', 'context'));
// 2. 让this方法执行
this();
}
实例:
function fn1(){console.log(1)} function fn2(){console.log(2)}
fn1.call(fn2); // 1 ,最终执行的是fn1
fn1.call.call(fn2); // 2, 执行的是最后一个call,最终执行的是fn2
fn1.call.call.call.call.call(fn2); //2
Function.prototype.call(fn1);
替换Function.prototype 中的this为fn1,执行Function.prototype,
注意Function.prototype是空函数,所以执行接口是没有任何输出
Function.call.call(fn1); //fn1
网友评论