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

为什么对象中定义的函数与普通函数的this指向存在差异?

JavaScript普通函数this指向差异原因解答

你提到的this指向由调用位置决定的判断是正确的,两个函数调用结果不同,本质是触发了不同的this绑定规则:

1. c.func() 绑定逻辑

该调用走隐式绑定规则:
当函数作为对象的属性方法,通过对象.方法名()的形式被触发时,this会直接绑定到前缀的调用对象上,这里c.func()的调用发起方是对象c,因此函数内部的this指向c,this.name的取值就是c.name的值john。

注意:你之前误以为调用位置在window上下文所以this指向window是错误的,只要调用时函数被某个对象持有并作为方法触发,优先级更高的隐式绑定会覆盖默认的全局绑定。

2. data() 绑定逻辑

该调用走默认绑定规则:
当函数没有任何前置对象、作为独立函数直接调用时,非严格模式下this默认绑定到全局对象(浏览器环境为window,Node.js环境为globalThis),严格模式下this会绑定为undefined。
另外注意data函数内部的let name: "hh"属于代码笔误,即使修正为let name = "hh",它也只是函数作用域内的普通变量,和this绑定的对象没有任何关联,不会影响this.name的取值。如果全局作用域下没有声明name变量,this.name就会返回undefined,和前者的john结果不同。

核心绑定优先级总结

普通函数的this绑定优先级从高到低为:

  • new绑定 > 显式绑定(call/apply/bind)> 隐式绑定 > 默认绑定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:51:02