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

标签 javascript prototype javascript-objects

在这里,我创建了一个函数,该函数最终将用作其他克隆的构造函数。除了创建的属性arguments、caller、length、name、__proto__(链接到Function.protoype)之外,还创建了prototype属性。此属性指向一个对象,该对象将作为原型(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 属性?

因此,人们可能应该仔细规划一个对象以避免这种情况发生。

最佳答案

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

Clonetrooper.prototype.foo = ...

或(例如使用 jQuery)

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

关于javascript - 这是正确的(JavaScript 原型(prototype)属性)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645973/

相关文章:

javascript - 有没有办法对这个对象数组进行分组或减少

javascript - 如何替换嵌套对象中的键

javascript - Angular2 useAsDefault 不适用于子路由

javascript - 使用 javascript/jquery 完全删除具有特定类的 div 的所有实例?

javascript:对于同一类的不同对象,将数组复制到不同的变量中

javascript - 从对象中获取属性值并将其分配给 JavaScript 中的变量

javascript - 在其外部定义的对话框中的 Var 返回未定义的 jQuery

javascript - 只改变一个 div 的 z-index 而不是它的每个 child

javascript - 在哪里添加字符串原型(prototype)

javascript - [].__proto__ === Array.prototype//=== [Symbol(Symbol.unscopables) : Object]?