为了账号安全,请及时绑定邮箱和手机立即绑定

js扩展原型方法里 this指向问题

js扩展原型方法里 this指向问题

隔江千里 2018-11-13 16:14:59
JavaScript忍者秘籍这本书中 有一段Prototype库,函数bind代码的示例:Function.prototype.bind = function(){            var fn = this, args = Array.prototype.slice.call(arguments),                object = args.shift();            return function(){                  return fn.apply(object,args.concat(Array.prototype.slice.call(arguments)));            };        };             var myObject = {a:"1"};            function myFunction(){                return this == myObject;            };            var aFunction = myFunction.bind(myObject);            aFunction();我用断点查看 函数bind里面的fn指向myFunction这个函数 这个我不太理解 我的理解是只要用Function.prototype 这个原型扩展的方法 此方法里面开始声明的变量var fn=this;中fn的指向就指向使用这个方法的函数 就像本例中的myFunction.bind(myObject);调用bin方法,fn指向myFunction这个函数 不知道这样理解对不对
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

其实不太能懂你的提问,那咱就来用思路走一遍这个代码吧

myFunction.bind(myObject)进入到原型得bind函数内部

  1. 将myFunction赋值给fn,将参数转化成一个数组args,将第一个参数删除并赋值给object。

  2. 返回一个函数,然后你思考下闭包这回事,然后就了解。这个函数干的活可以简单得理解为myFunction.apply(myObject,[...这里是其他参数])

aFunction()

就是myFunction.apply(myObject,[...这里木有参数])
然后进入到myFunction内部,因为apply的关系this就是myObject,然后干的活就是myObject==myObject
返回true


查看完整回答
反对 回复 2018-12-08
  • 1 回答
  • 0 关注
  • 459 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号