Javascript - 如何在运行时动态创建对象?

时间:2017-07-22 15:04:31

标签: javascript object constructor

我有一个构造函数:

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)要改变,而是让用户可以选择更改自己的“个人”选项。对象的实例。此外,他们还需要创建同一对象的多个实例,能够随意更改属性,而不会影响核心'代码中定义的对象。

4 个答案:

答案 0 :(得分:2)

声明Array以保存所有已创建的汽车并使按钮on click事件调用一个创建新实例的函数并将其添加到数组中。

的Javascript

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))
}

HTML

<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);
相关问题