2017-12-31 自己模拟js call

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,808评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,092评论 1 10
  • JS使用技巧专题 1开发技巧 1.1函数使用 1.1.1函数声明方式 JS函数的写法总结 http://blog....
    Kevin_Junbaozi阅读 1,104评论 0 11
  • 周末几个朋友小聚。谈起将来给小朋友学什么乐器的事情。当当一拍大腿,情绪激动的说,我妈妈让我从小学钢琴,真是大错特错...
    夏至未眠阅读 2,279评论 4 19
  • 都说,张爱玲将世间喧闹和无声孤寂双双刻在人心,半生缘过后,我愿先不言是何结局,亦不纠话后苍凉,起码我是喜欢着曼桢世...
    向阳sa阅读 464评论 1 1