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
相关产品推荐
相关产品推荐

