javascript singleton - 这是正确的

时间:2013-11-20 17:37:46

标签: javascript

我正在编写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

它似乎按照我的预期工作,但我担心内存泄漏。所以我决定问专家,如果这是正确的解决方案

2 个答案:

答案 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给出了正确答案。