JavaScript的优先级问题

clipboard.png
为什么说new确实修改了this绑定,new的作用不是创建一个对象然后将返回的值附到对象上吗,或者将this绑定到var的对象上,应该是对obj1.a没有任何操作的不是吗

阅读 1.9k
3 个回答

看这里吧new
那句话好绕,我试图解释一下,new确实修改了this,但是他做的第一件事创建一个继承foo.prototype的对象,也就是此时的this是指foo {},然后他修改的是这个this

应该是对obj1.a没有任何操作的不是吗

所以确实没任何操作。

bar 作为一个普通函数,它的this已经被绑定为了 obj1;
然而在构造函数内部,this指向新创建出的对象;
new 关键字给你做了三件事:
var o = new Object();
this = o;
...
return o;
this的指向就这么被改了;
也因此bar 虽然没有返回值,但是作为构造函数时能得到一个实例。

调用foo.bind(obj1)得到bar,此时你再对bar执行bind、apply、call操作都无法改变bar已经绑定的obj1,但使用new却可以改变

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题