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


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

最佳答案

不完全是。当我需要单身人士时,我通常会执行以下操作:

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时将立即将其标记为垃圾回收。

关于javascript - javascript单例-这是正确的吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20102970/

10-12 13:24