Мой мозг, должно быть, понял это, пока я спал: хитрость заключается в том, чтобы прикрепить поле к прототипу, что кажется довольно очевидным сейчас, когда я об этом подумал, поскольку это то, что вы должны сделать, чтобы определить методы класса.
Следующее проверяется в JSLint и демонстрирует совместное использование поля всеми экземплярами MyClass (или см. этот код в jsfiddle ):
/*global alert */
function MyClass(name) {
this.name = name;
MyClass.prototype.field += 1;
}
MyClass.prototype.field = 0;
MyClass.prototype.myMethod = function () {
alert(this.name + "'s class's field is " + MyClass.prototype.field);
};
var myObj = new MyClass("first");
myObj.myMethod();
var myOtherObj = new MyClass("second");
myObj.myMethod();
myOtherObj.myMethod();
Я не уверен, есть ли более красивый способ сделать это, так как наличие «прототипа» повсюду кажется немного чрезмерным, с другой стороны, это может быть хорошо, потому что проясняет, что prototype.field не принадлежит экземпляру.