我能在 JavaScript 中动态添加属性吗?

6

在运行时向对象添加属性是否可行?它似乎可以正常运行,但我应该注意哪些问题?

我正在使用一个第三方JavaScript API,它有一个对象类,我已经实例化并在实例化后添加了自己的属性,就像下面的代码:

例如,我可以这样做:

var Car = function (id, type) {
    this.id = id;
    this.type = type;
};

var myCar = new Car(1,"Nissan");

// CAN I DO THIS: (needsWork not a property of object Car)
myCar.needsWork = true;

1
注意,你代码中的Car函数不是一个类,而是一个构造函数。你可以称之为“伪类”。 - Šime Vidas
3个回答

13

实际上,您可以用两种方法在JavaScript中实现这个功能:

  1. 为一个实例添加一个方法或属性(仅适用于该汽车)

    var myCar = new Car(1,"Nissan");
    myCar.needsWork = true;
    
  2. 向汽车原型添加一个方法或属性(所有的汽车,甚至是已经存在的汽车)

  3. var myCar = new Car(1, "Nissan");
    var biggerCar = new Car(2, "Hummer");
    Car.prototype.needsWork = true;
    alert( myCar.needsWork && biggerCar.needsWork 
            ?  "We need work"
            : "Something wrong here"
    );
    

参考资料:


谢谢,我知道原型的选项,只是想知道第一个选项是否可行。如果可以标记两个答案,那就太感谢了。谢谢提供信息。 - capdragon
没问题,点赞比采纳更好。只有点赞才能获得标签徽章 :-) - Sean Patrick Floyd
我认为将非函数属性附加到对象本身(在构造函数内使用this.needsWork = true)比附加到对象的原型更好,这是P.Floyd的观点。 - Šime Vidas
@Šime Vidas 当然,这基本上是相同的事情,只不过我来自Java背景,并且如果我能在类大纲中实际看到我定义的属性,我会感觉更安全。 - Sean Patrick Floyd

8
是的,这被称为对象扩展。它是JavaScript中的一个关键特性。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接