【发布时间】:2011-09-09 12:52:16
【问题描述】:
在 JavaScript 中,我们可以为函数的原型分配属性或直接设置其原型对象:
var MyClass = function() { };
// The "property" form...
MyClass.prototype.foo = function() { ... };
MyClass.prototype.bar = function() { ... };
MyClass.prototype.gah = function() { ... };
// OR the "assignment" form...
MyClass.prototype = {
foo:function() { ... },
bar:function() { ... },
gah:function() { ... }
};
我个人更喜欢赋值形式,因为您可以轻松地将对象包装在闭包中(例如隐藏“私有”对象),如果您以后决定更改“MyClass”的名称,您只需找到两个位置而不是可能的几十个。 (当然,“属性”形式也可以这样说,通过使用和调用以现有原型作为参数的函数,但在我看来“赋值”形式似乎更直接。)
是否有充分的理由使用一种形式而不是另一种形式?
[编辑]
正如评论者@Raynos 所提到的,第二种形式(赋值)破坏了prototype.constructor 属性,该属性应设置为 MyClass 函数(默认情况下为第一种形式 [property])。这有什么真正的缺点吗(除了属性没有设置的事实)?
【问题讨论】:
标签: javascript prototype-programming