我有一个构造函数:
function car(name, speed, options){
this.name = name;
this.speed = speed;
this.options = options;
}
我可以像这样制作一个新对象:
var carMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);
如果我想让某人单击按钮,并通过该按钮单击动态创建新对象,我将如何进行此操作?我不想要这个核心'对象(carMustang)要改变,而是让用户可以选择更改自己的“个人”选项。对象的实例。此外,他们还需要创建同一对象的多个实例,能够随意更改属性,而不会影响核心'代码中定义的对象。
答案 0 :(得分:2)
声明Array
以保存所有已创建的汽车并使按钮on click
事件调用一个创建新实例的函数并将其添加到数组中。
var cars = []
function car(name, speed, options){
this.name = name;
this.speed = speed;
this.options = options;
}
function createCar(name, speed, options) {
cars.push(new car(name, speed, options))
}
<button onclick="createCar('Mustang', 250, ['Cruise Control','Air Conditioning', 'ABS'])">Create Car</button>
您的变量cars
将保存所有已创建的对象,您可以根据需要对其进行检索并编辑其属性。
答案 1 :(得分:0)
为什么不创建一个从点击处理程序调用的“自定义构造函数”?:
function newBaseMustang() {
var baseMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);
return baseMustang;
}
然后调用者可以进行他们想要的任何更改:
var mustang1 = newBaseMustang();
mustang1.speed += 100;
var mustang2 = newBaseMustang();
mustang2.name = "MyMustang";
您还可以使用像Immutable.js这样的库来使“模板车”不可变并对其进行修改后的副本。
答案 2 :(得分:0)
让用户像这样创建自己的Message sent: 250 2.6.0 <b831fb74-3585-4123-f519-9af2244e2dfe@yyy> [InternalId=49877455208613, Hostname=KL1PR02MB1512.apcprd02.prod.outlook.com] 13148 bytes in 0.592, 21.665 KB/sec Queued mail for delivery
副本
carMustang
您可能还必须克隆 click () {
let userCopy = Object.assign({}, carMustang);
// then mutate userCopy the way you want
}
carMustang
你也可以用lodash的clonedeep深度克隆carMustang。
click () {
let userCopy = Object.assign({}, carMustang, { options: [...carMustang.options]});
}
答案 3 :(得分:0)
您可以克隆对象:
var carMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);
var copy = Object.assign({}, carMustang);
console.log(copy);