JavaScript中, new类之后,是静态成员先定义,还是构造函数先执行?

在 JavaScript 里使用 new 关键字创建对象时,并不存在静态成员先定义还是构造函数先执行这种严格的先后顺序关系,因为静态成员属于类本身,而构造函数是用于初始化实例对象的。下面详细分析一下具体情况:

执行顺序分析

当使用 new 关键字调用构造函数创建实例时,过程如下:

  1. 创建新对象 :创建一个新的空对象,并且这个新对象会继承构造函数的 prototype 属性。
  2. 绑定 this :将新对象绑定到构造函数内部的 this 上。
  3. 执行构造函数 :在构造函数内部对 this 指向的新对象进行初始化操作。
  4. 返回对象:如果构造函数显式返回一个对象,则返回该对象;否则,返回新创建的对象。

而静态成员是通过类名直接访问的,它们在类定义时就已经存在,和实例对象的创建过程是相互独立的。也就是说,无论是否使用 new 来创建实例,静态成员都已经被定义好了。

示例代码

javascript 复制代码
class MyClass {
    // 静态成员
    static staticProperty = '静态属性';
    static staticMethod() {
        console.log('静态方法被调用');
    }

    // 构造函数
    constructor() {
        this.instanceProperty = '实例属性';
        console.log('构造函数执行');
    }
}

// 创建实例
const myInstance = new MyClass();

// 访问静态成员
console.log(MyClass.staticProperty); 
MyClass.staticMethod(); 

代码解释

  • 静态成员定义staticPropertystaticMethod 属于静态成员,在类定义时就已经存在,不需要通过实例化对象来创建。
  • 构造函数执行 :当执行 new MyClass() 时,会创建一个新的实例对象,然后执行构造函数对该实例对象进行初始化。

结论

静态成员在类定义时就已经定义好了,与使用 new 创建实例对象的过程没有直接的先后顺序关系。每次使用 new 关键字创建实例时,都会执行构造函数来初始化新的实例对象。

相关推荐
2501_920931701 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
AI老李1 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
方也_arkling2 小时前
Element Plus主题色定制
javascript·sass
2601_949809592 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
Up九五小庞2 小时前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
摘星编程3 小时前
React Native + OpenHarmony:UniversalLink通用链接
javascript·react native·react.js
qq_177767373 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88213 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
程序员清洒5 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6665 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart