美文网首页
2017-12-31 自己模拟js call

2017-12-31 自己模拟js call

作者: 章鱼小丸子_7be1 | 来源:发表于2017-12-31 13:05 被阅读0次

    模拟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

    相关文章

      网友评论

          本文标题:2017-12-31 自己模拟js call

          本文链接:https://www.haomeiwen.com/subject/xunogxtx.html