这是正确的(JavaScript原型属性)吗?

时间:2015-06-04 14:02:55

标签: javascript prototype javascript-objects

这里我创建了一个函数,它最终将用作其他克隆的构造函数。除了创建的属性arguments, caller, length, name, __proto__(link to Function.protoype)之外,还会创建prototype属性。此属性指向将在使用new关键字时调用此函数时创建的实例作为原型指定的对象。

function Clonetrooper(ID, rank, yearsOfService, type){
if (!(this instanceof Clonetrooper)){
    return new Clonetrooper(ID, rank, yearsOfService, type);
}
this.ID = ID;
this.rank = rank;
this.yearsOfService = yearsOfService;
this.type = type;
} 

所以当我这样做时:

Clonetrooper.prototype.hasUtilityBelt = true;
Clonetrooper.prototype.hasLightSaber = false;

我在Clonetrooper prototype属性上添加了属性。一个接一个。

但如果我之后这个

Clonetrooper.prototype = {
    name: null
    hasDroid: null

};

我已覆盖Clonetrooper's构造函数的链接,将其替换为链接到Object.prototype的新Object

所以我的问题是,最后一种语法确实会覆盖你的prototype属性?

因此,可能应该仔细规划object以避免这种情况发生。

1 个答案:

答案 0 :(得分:1)

是的,我们必须小心。在大多数情况下,我们应该通过以下两种方式之一扩展 现有的原型:

Clonetrooper.prototype.foo = ...

或(例如使用jQuery)

$.extend(Clonetrooper.prototype, {
    bar: ...,
    baz: ...
})