这不是“如何”问题。我想讨论两种可能的JavaScript实例化方法,以找出每种方法的优缺点。
第一个:
function Counter() {
this.counter = 0;
}
Counter.prototype.count = function() {
this.counter += 1;
return this.counter;
};
var counter = new Counter();
console.log("Counter: " + counter.count());
第二个:
var counter = new (function() {
var counter = 0;
this.count = function() {
counter += 1;
return counter;
}
})();
console.log("Counter: " + counter.count());
重要提示:counter
应该只实例化一次。
第一个看起来更结构化,但第二个不会使用不必要的Counter
函数混淆命名空间。
new
。
答案 0 :(得分:1)
唯一的区别是counter
可以在第一种方法中被外部源修改(假设两个“类”只会被初始化一次)。
在第一种方法中,counter
是“公开”可见且可编辑的属性
在第二种方法中,counter
是一个局部变量,不能被函数外的任何东西修改。
counter = new Counter();
counter.count(); // 1
counter.count = 9001; // Not intended?
counter.count(); // 9002
答案 1 :(得分:0)
AFAIK,一个直接的区别是你可以在第一个代码块中多次调用Counter();而在第二个函数中,函数没有赋值,直接返回变量,因此无法再次调用。
答案 2 :(得分:0)
不,他们不相同。考虑第一个。它更灵活,因为您可以在应用程序的其他部分使用原型扩展它。而在第二个中,您将无法轻松完成,因为您没有主类引用。