Javascript 对象默认为上次定义的对象

Javascript 对象默认为上次定义的对象,javascript,object,constructor,Javascript,Object,Constructor,所以我有一个对象构造函数,但是当我尝试将一个对象放入时,数组cmndlist总是定义了最后一个对象的x个数量。(基本上,它们最终都是一样的) 下面是我定义对象的代码 command("foo",0,"foo", function(message){ //code }); command("bar",1,"bar", function (message){ //code }); command("foobar",1,"foobar", function (message){

所以我有一个对象构造函数,但是当我尝试将一个对象放入时,数组
cmndlist
总是定义了最后一个对象的x个数量。(基本上,它们最终都是一样的)

下面是我定义对象的代码

command("foo",0,"foo", function(message){
    //code
});

command("bar",1,"bar", function (message){
    //code
}); 

command("foobar",1,"foobar", function (message){
    //code
}); 
因此在本例中,数组中的所有对象都将具有与
foobar
相同的属性


我不希望这样,我希望它拥有所有三个对象。

要获得一个新对象,我们需要在调用命令之前添加“new”。否则,我们每次都引用相同的对象实例。 在这里查看JavaScript中对象构造的描述。


如果您想知道,第一个剪报也会出现在什么是
cmndlist
&为什么不
new
?使用new关键字。@MarkMeyer它是对象所在的数组。如果您不使用
new
这是
窗口
对象,不是原型的实例。请在回答中解释您更改了什么以及为什么需要更改。我们需要调用“new”来创建新的对象实例,否则我们的调用只是引用单个对象。(请注意,现在对命令的调用前面有新的内容)。对象是通过引用传递的(基本上是指向实际对象的地址指针),所以当我们在没有新调用的情况下添加到数组时,我们只是向同一个对象添加了一个新指针。然后追加。以后将很容易阅读和维护。@PaulThomas“否则我们的调用只是引用一个对象”-这是哪个对象?在解释中加上这一点将非常有帮助,或者是另一个有用的解释。
command("foo",0,"foo", function(message){
    //code
});

command("bar",1,"bar", function (message){
    //code
}); 

command("foobar",1,"foobar", function (message){
    //code
}); 
var cmndlist = [];

function command(name, category, help, callback) {
    this.name = name;
    this.help = help;
    this.use = callback;

    if(cmndlist.hasOwnProperty(category) == false) cmndlist[category] = [];

    cmndlist[category].push(this);
}; 


new command("foo",0,"foo", function(message){
    //code
});

new command("bar",1,"bar", function (message){
    //code
}); 

new command("foobar",1,"foobar", function (message){
    //code
});