我正在编写javascript单例类,并希望像这样使用单例模式:
function TestClass() {
var self = TestClass.prototype;
if (self.instance) return self.instance;
self.instance = this;
//methods and props declarations
}
var x = new TestClass;
var y = new TestClass;
console.log(x === y); // true
它似乎按照我的预期工作,但我担心内存泄漏。所以我决定问专家,如果这是正确的解决方案
答案 0 :(得分:1)
不完全是。当我需要单身时,我通常会这样做:
function TestClass() {
if (TestClass.__singleton) {
return TestClass.__singleton;
}
// begin construction ...
this.a = function() { };
this.b = 1;
// ... end construction
TestClass.__singleton = this;
} // TestClass
var x = new TestClass(); // creates a new TestClass and stores it
var y = new TestClass(); // finds the existing TestClass
console.log(x === y); // true
y.b = 2;
x.c = 3;
console.log(x.b === y.b && x.c === y.c); // true
如果我的理解是正确的,后续TestClass
实例化,在这种情况下,将创建一个小的,部分定义的TestClass
对象,但会立即将它们标记为垃圾返回TestClass.__singleton
时的集合。
答案 1 :(得分:0)
您的代码本身并没有错,但也不是很好。你不是在创造一个单身人士,只是“劫持”原型。 #svidgen给出了正确答案。