【发布时间】:2011-10-21 21:22:19
【问题描述】:
所以,在回答这个网站上的另一个问题时,我为某人编写了一个类,以便在 JavaScript 中创建一个 BitArray 实例。我发布的代码如下所示:
var foo = function(param1) {
this._member = param1;
this.getMember = function() { return this._member; };
this.setMember = function(val) { this._member = val; };
this.alertMember = function() { alert(this._member); };
foo.STATIC_CONSTANT = "some value";
}
我收到的其中一个 cmets 是相当严厉的“你绝对应该将方法添加到 foo.prototype 而不是这个”。如果我接受这种批评并将其应用于上述内容,它会将代码变成:
var foo = function(param1) {
this._member = param1;
}
foo.prototype.getMember = function(){ return this._member; };
foo.prototype.setMember = function(val) { this._member = val; };
foo.prototype.alertMember = function() { alert(this._member); };
foo.STATIC_CONSTANT = "some value";
我的问题是,假设 foo 永远不会被子类化,这两种方法之间有什么区别?
需要明确的是,我并不是在提倡编写草率的代码 - 我认为评论者发现我草率了 - 但是当我承认他的正确性时,这确实让我思考 - 如果我是创建一个有效的密封类?
我在这里缺少一些性能或功能后果吗?或者当一个类不会被子类化时使用原型无关?
【问题讨论】:
-
只是为了澄清:我没有说“方法永远不应该在原型之外”,这绝对不是这种情况。有很多有效的用例,您希望在对象实例上而不是在对象的原型上拥有方法。 这个不是其中之一。
-
@Daniel Baulig - 诽谤已更正:)
标签: javascript