Как сделать статический массив в классе JavaScript? - PullRequest
1 голос
/ 09 марта 2011

Класс сделан в javascript. я создаю его объекты в других скриптах. Но мне нужно, чтобы один элемент данных (массив) был статичным? каждый раз, когда я создаю новый объект этого класса, он не должен потерять данные массива ... мне нужны старые данные массива ...

Ответы [ 3 ]

3 голосов
/ 09 марта 2011

Вы можете имитировать статические элементы с помощью свойства конструктора.В приведенном ниже примере у нас есть псевдо-класс с конструктором Foo.Когда мы создаем экземпляр Foo, ссылка на этот экземпляр добавляется к статическому свойству instances Foo.

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 = [];

Итак, мы действительно говорим здесь об использовании конструктора в качестве «пространства имен»храните переменные, которые каким-то образом связаны с «классом».Это лучше, чем использование глобалов, потому что это немного чище.Как уже говорили другие, классов как таковых нет, но этот шаблон концептуально близок к статическим элементам, если вы хотите мыслить классически.

2 голосов
/ 09 марта 2011

Просто создайте глобальную переменную.

<script>
    var myGlobalArray = [];
</script>
1 голос
/ 09 марта 2011

Хитрость заключается в том, чтобы создать закрытую переменную и определить методы-прототипы в конструкторе, чтобы иметь возможность использовать закрытую переменную в замыкании.

Итак, это может приблизиться к тому, что вы хотите?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...