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

Javascript-如何在运行时动态创建对象?,javascript,object,constructor,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"]); 如果我想让某人单击一个按钮,并通过该按钮的单击动态创建新对象,

我有一个构造器:

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

为什么不创建一个从单击处理程序调用的“自定义构造函数”

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之类的库使“模板车”不可变并对其进行修改

让用户像这样创建自己的
carMustang
副本

    click () {
       let userCopy = Object.assign({}, carMustang);
        // then mutate userCopy the way you want 

    }
您可能还必须克隆
carMustang

click () {
   let userCopy = Object.assign({}, carMustang, { options: [...carMustang.options]});
}
你也可以用lodash的clonedeep深度克隆carMustang

click () {
   let userCopy = _.cloneDeep(carMustang);
}

声明一个
数组
以容纳所有创建的车辆,并使单击上的按钮
事件调用一个函数,该函数创建一个新实例并将其添加到数组中

Javascript HTML
创建汽车

您的变量
cars
将保存所有创建的对象,如果需要,您可以检索它们并编辑它们的属性。

您可以克隆对象:

var carMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);
var copy = Object.assign({}, carMustang);
console.log(copy);

我喜欢这个方法,谢谢-我注意到你的createCar()函数调用没有任何参数-知道如何根据按钮的文本动态传递参数吗?我有一个方法,但它使用eval():(你能使用jQuery吗?因为在('click')上使用
jQuery()
比使用
eventListeners
或其他简单的javascript方法容易得多。事实上,我发现您可以像这样使用
DOM
元素属性:
Mustang
是的,我可以使用jQuery,但我想暂时保留这一基本属性,以便理解类对象模型。谢谢我可以稍后引用副本吗?如果用户创建多个不同的副本怎么办?我如何引用这些副本?为什么不将每个副本推送到某个哈希表中的数组中?不幸的是,我不知道以后如何引用它-尤其是如果用户创建了多个副本(?)我不知道如何使用此方法创建多个副本(?)我以后如何引用它们?我查看了immutable.js谢谢-看起来对我来说太复杂了呵呵。非常有趣-你让我对博客和youtube视频产生了兴趣:)
<button onclick="createCar('Mustang', 250, ['Cruise Control','Air Conditioning', 'ABS'])">Create Car</button>
var carMustang = new car("Mustang", 250, ["Cruise Control","Air Conditioning", "ABS"]);
var copy = Object.assign({}, carMustang);
console.log(copy);