只允许在javascript中使用类成员的一个实例

时间:2015-10-25 22:34:41

标签: javascript ecmascript-6

我正在谷歌地图API前面创建一个助手类 - 只是为了学习。

我想在我的班级中只保留一个google.maps.Map对象的实例,即使有人决定实例化该类的另一个实例。

我来自.NET背景,概念很简单 - 但是我仍然适应javascript(和ES6),所以任何指针都非常受欢迎。

这是一段解释(通过评论)我想要的东西。

class Foo {
    constructor(bar) {
        // If someone else decides to create a new instance
        //  of 'Foo', then 'this.bar' should not set itself again.
        // I realize an instanced constructor is not correct.
        // In C#, I'd solve this by creating a static class, making
        //  'bar' a static property on the class.
        this.bar = bar;
    }
}

1 个答案:

答案 0 :(得分:5)

我认为这就是你想要的:

var instance = null;

class Foo {
  constructor(bar) {
    if (instance) {
      throw new Error('Foo already has an instance!!!');
    }
    instance = this;

    this.bar = bar;
  }
}

class Foo {
  constructor(bar) {
    if (Foo._instance) {
      throw new Error('Foo already has an instance!!!');
    }
    Foo._instance = this;

    this.bar = bar;
  }
}