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

JS对象中MethodB调用MethodA失效原因及相关ECMA标准说明

Object = {
    MethodA() {
        console.log('A')
    },

    MethodB() {
        this.MethodA()
    }
}

问题成因

核心为调用MethodB时的this绑定对象不正确:

  • 方法内的this指向不是由方法定义位置决定的,而是由方法的调用方式决定。如果调用MethodB时没有将调用上下文绑定到上述自定义的Object对象上,this就会指向其他值:
    • 非严格模式下独立调用MethodB时,this指向全局对象,全局对象不存在MethodA属性,调用不存在的方法会抛出未捕获的类型错误,自然不会执行MethodA内的打印逻辑
    • 严格模式下独立调用MethodB时,this为undefined,直接调用undefined.MethodA()也会抛出未捕获的类型错误,导致逻辑中断
  • 额外说明:将自定义变量命名为Object会覆盖全局原生Object构造函数,属于不规范写法,但不是该问题的核心诱因。

涉及技术术语

  • This 绑定(This Binding)
  • 隐式绑定丢失
  • 函数执行上下文
  • 严格模式

ECMA标准查阅位置

对应ECMA-262标准的可执行代码与执行上下文章节下的this决议相关规则,现行标准中对应第13章的13.2(函数对象)、13.3(This值决议)小节,不同版本标准的小节序号可能存在小幅差异,检索This Binding Resolution相关内容即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:06:03