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

JavaScript如何通过变量创建类的新实例并添加至数组?

如何通过变量引用类创建新实例并添加至数组

嘿,我完全懂你碰到的问题啦!你写的代码里apple其实是Item类的一个实例对象,而不是类本身——new关键字后面必须跟构造函数(也就是类)才能创建新实例,所以new apple肯定跑不起来~

我给你两种常见的正确实现方式,看哪种更符合你的需求:

方式1:用变量存储类本身(推荐,适合批量创建同类型实例)

首先确保你的变量存的是Item这个类,而不是它的实例,这样就能用这个变量创建新实例了:

// 先定义你的Item类(假设你已经有这个定义了)
class Item {
  constructor(name, price, quantity) {
    this.name = name;
    this.price = price;
    this.quantity = quantity;
  }
}

// 把类本身赋值给变量(而不是实例)
var targetClass = Item;

// 创建第一个实例
var apple = new targetClass("Apple", 5, 10);

// 初始化数组并添加新实例
var items = [];
// 用变量创建新的Item实例并推入数组
items.push(new targetClass("Banana", 3, 15));
items.push(new targetClass("Orange", 4, 8));
// 也可以把之前的apple加进去
items.push(apple);

方式2:基于现有实例创建新实例(克隆实例)

如果你的需求是复制已有的apple实例来生成新实例,那可以给类加个克隆方法,或者手动传递原实例的属性:

方法A:手动传递属性

var apple = new Item("Apple", 5, 10);
var items = [];

// 直接用apple的属性创建新实例
items.push(new Item(apple.name, apple.price, apple.quantity));

方法B:给类添加克隆方法(更优雅)

class Item {
  constructor(name, price, quantity) {
    this.name = name;
    this.price = price;
    this.quantity = quantity;
  }

  // 新增克隆方法,返回一个新的实例
  clone() {
    return new Item(this.name, this.price, this.quantity);
  }
}

var apple = new Item("Apple", 5, 10);
var items = [];
// 调用克隆方法得到新实例并推入数组
items.push(apple.clone());

核心要点就是:分清类本身和类的实例——类是“模板”,实例是用模板造出来的“具体对象”,new只能跟模板(类/构造函数),不能跟具体对象哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:33:15