У меня возникли некоторые проблемы при попытке заставить переменные класса работать в javascript.
Я думал, что понял модель наследования прототипа, но, очевидно, нет. Я предполагал, что поскольку прототипы будут совместно использоваться объектами, то и их переменные будут такими же.
Вот почему этот кусочек кода смущает меня.
Как правильно реализовать переменные класса?
function classA() {};
classA.prototype.shared = 0;
a = new classA;
//print both values to make sure that they are the same
classA.prototype.shared;
a.shared;
//increment class variable
classA.prototype.shared++;
//Verify that they are each 1 (Works)
classA.prototype.shared;
a.shared;
//now increment the other reference
a.shared++;
//Verify that they are each 2 (Doesn't Work)
classA.prototype.shared;
a.shared;
UPDATE:
Таким образом, кажется, что все подтверждают тот факт, что, увеличивая переменную экземпляра, мы не влияем на прототип. Это хорошо, это то, что я задокументировал в своем примере, но разве это не похоже на ошибку в дизайне языка? Почему это поведение было бы желательным? Я нахожу странным, что когда переменная экземпляра не определена, мы переходим по скрытой ссылке на прототип, где получаем значение переменной, но копируем ее в объект экземпляра.
Я также понимаю, что это не java / c ++ / ruby / python, это другой язык. Мне просто любопытно, почему это поведение может быть хорошим.