如何在javascript类中创建静态数组?

时间:2011-03-09 10:52:59

标签: javascript arrays class static

一个类是用javascript编写的。我用不同的其他脚本创建它的对象。但我需要它的一个数据成员(数组)是静态的? 每次我创建该类的新对象,那么它不应该丢失该数组数据..我需要旧的数组数据......

3 个答案:

答案 0 :(得分:3)

您可以使用构造函数上的属性模拟静态成员。在下面的示例中,我们有一个带有构造函数Foo的伪类。当我们创建一个Foo实例时,对该实例的引用被添加到Foo的静态instances属性中。

function Foo () {
    this.description = ' this is the Foo class';
    Foo.instances.push(this); // static member keeps ref to each instance
};

// this is an instance member
Foo.prototype.getDescription = function () {
    return this.description;
}

// this is a static member
Foo.instances = [];

所以我们在这里真正讨论的是使用构造函数作为'命名空间'来保存与'class'有某种关系的变量。它比使用全局变量更好,因为它有点清洁。正如其他人所说的那样,没有这样的类,但是如果你想以一种经典的方式思考,这种模式在概念上接近静态成员。

答案 1 :(得分:2)

只需创建一个全局变量。

<script>
    var myGlobalArray = [];
</script>

答案 2 :(得分:1)

诀窍是创建一个私有变量并在构造函数中定义原型方法,以便能够在闭包中使用私有变量。

那么,这可能接近你想要的吗?

function Foo(){
  var staticArr = [];
  if (!('prototypemethodsset' in Foo)){
      var proto = Foo.prototype;
      proto.getArr = function(){
          return staticArr;
      };
      proto.addArr = function(){
           staticArr.push(Array.prototype.slice.call(arguments));
      };
      proto.prototypemethodsset = true;
  }
}

var f = new Foo
  , g = new Foo;

f.addArr(1,4,8,9,13,7);
g.addArr(5,7);
alert(g.getArr()); //=> 1,4,8,9,13,7,5,7
alert(f.getArr()); //=> 1,4,8,9,13,7,5,7