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

new instance field语法等价性与类内变量提升规则问询

两段代码运行效果完全不一致

第一段代码用的是ES2022标准的公共实例字段语法:

class Range2 {
    default = 77;
    constructor(from, to) {
        this.from = from;
        this.to = to;
    }
}

这里的default = 77等价于在构造函数最开头隐式执行this.default = 77,77会作为自有属性挂载到每个Range2实例上,运行无报错。

第二段代码逻辑完全不同:

class Range2 {
    constructor(from, to) {
        this.from = from;
        this.to = to;
        default = 77;
    }
}

类内部默认运行在严格模式下,未声明变量直接赋值会直接抛出ReferenceError: default is not defined;即使关闭严格模式,赋值的也是全局作用域的default变量,和Range2实例没有任何关联。


类字段不存在提升

类内函数外定义的所有实例/静态字段都没有提升特性,无法在字段声明的位置之前访问该字段。


公共实例字段语法运行规则

  • 初始化时机:父类构造函数执行完毕后、当前类构造函数执行前触发初始化,按照类内字段声明的从上到下顺序依次执行
  • 上下文指向:实例字段初始化时this指向当前正在创建的类实例;如果加了static前缀声明为静态字段,this指向类本身
  • 默认值规则:仅声明未赋值的字段,默认值为undefined
  • 作用域规则:字段初始化处于类的专属作用域,可直接访问类的私有属性、静态属性,无法访问构造函数内部的局部变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:03