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

JavaScript中如何在构造函数内让类实例获取对象所有属性

类构造函数中将对象属性挂载到实例的实现方法

核心思路是在构造函数执行阶段,把获取到的对象的属性,批量绑定到当前实例的上下文this上,常用实现方式有两种:


方法1:使用Object.assign(最常用,满足绝大多数场景)

Object.assign会把源对象所有自有可枚举属性浅拷贝到目标对象(也就是类实例this)上,写法简洁:

class MyClass {
  constructor() {
    const object = createMyObject(); // 返回 {a:1, b:2, c:3}
    Object.assign(this, object);
  }
}

// 注意:class是JS保留关键字,不能作为变量名,需替换为合法标识符
const myInstance = new MyClass();
console.log(myInstance.a); // 输出 1
console.log(myInstance.b); // 输出 2
console.log(myInstance.c); // 输出 3

注意点:

  • 该方法为浅拷贝,如果属性值是引用类型(对象、数组等),实例上的属性和原对象的属性会指向同一块内存地址,修改一方会影响另一方
  • 不会复制源对象的不可枚举属性、属性描述符(比如getter/setter、只读配置),也不会复制原型链上的属性

方法2:使用属性描述符复制(适配特殊场景)

如果需要完整复制源对象的属性特性(包括不可枚举属性、getter/setter、读写权限配置),可以搭配Object.getOwnPropertyDescriptors和Object.defineProperties实现:

class MyClass {
  constructor() {
    const object = createMyObject();
    Object.defineProperties(
      this,
      Object.getOwnPropertyDescriptors(object)
    );
  }
}

特殊场景写法

如果属性数量极少,且需要单独控制每个属性的挂载逻辑,也可以手动逐个赋值:

class MyClass {
  constructor() {
    const object = createMyObject();
    this.a = object.a;
    this.b = object.b;
    this.c = object.c;
  }
}

这种写法在属性多的时候冗余度极高,后续维护成本大,非必要不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:44