You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何new调用obj2.foo绑定函数时this指向空对象?

问题解答

要搞懂这两种调用的差异,核心得先明确两个关键点:

  1. bind生成的绑定函数,被new操作符调用时,绑定的this会被忽略,new会创建一个全新的空对象作为函数内的this。
  2. 构造函数(用new调用的函数)如果返回了一个对象类型的值,那么new的结果就是这个返回的对象,而不是默认创建的实例。

拆解new obj2.foo()的执行过程

  • 首先,obj2.foo是bar()执行后返回的foo.bind(obj1),也就是一个预先绑定了obj1的foo函数。
  • 当用new调用这个绑定函数时,按照bind的规则,之前绑定的obj1直接失效,new会自动创建一个空对象作为foo内部的this,所以最终输出foo {}。

拆解new bar()()的执行过程

  • 第一步执行new bar():bar是普通函数,用new调用时,原本会创建一个bar的实例对象,但bar函数的返回值是foo.bind(obj1)(一个对象类型的绑定函数),所以new bar()的结果就是这个绑定函数,而不是默认的bar实例。
  • 第二步调用这个绑定函数的():这是普通调用绑定函数,bind绑定的obj1会生效,所以foo内部的this指向obj1,最终输出foo { a: 1 }。

内容的提问来源于stack exchange,提问作者jimkk159

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:57:08