我通常会看到揭示原型(prototype)模式的示例,如下面的语法#2 所示,但我发现语法#1 更加一致。除了语法之外,它们还有什么不同吗?功能方面、性能方面还是其他方面?
语法#1:
function MyClass1(name){
this.name = name;
}
MyClass1.prototype = new function () {
var static = 0;
var getStatic = function () {
return static;
}
this.incStatic = function () {
static++;
return getStatic.call(this);
}
this.constructor = MyClass1
};
与#2 完全相同:
function MyClass2(name){
this.name = name;
}
MyClass2.prototype = function () {
var static = 0;
function getStatic () {
return static;
}
function incStatic() {
static++;
return getStatic.call(this);
}
return {
incStatic:incStatic,
constructor:MyClass2
};
}();
这是一个演示完全相同行为的 fiddle :http://jsfiddle.net/arctelix/FSk8z/
这两种语法似乎具有完全相同的结果。但是,我从未见过#1 中所示的示例,所以我想知道为什么?对我来说,#1 只是一种更恒定的语法,我讨厌必须在特殊的返回 block 中识别公共(public)成员。
最佳答案
我个人认为重新分配something.prototype
是不合适的。相反,扩展原型(prototype):
(function() {
var static = 0;
MyClass.prototype.getStatic() {return static;}
MyClass.prototype.incStatic() {return static++;}
})();
关于javaScript:揭示原型(prototype)模式:这两个版本有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131366/