Стиль JavaScript и стандартная практика - определение «статического» метода пользовательской функции / объекта - PullRequest
0 голосов
/ 07 сентября 2010

Простите, вероятно, неправильное применение терминологии в этом вопросе (кстати, пожалуйста, исправьте меня, где не так).

Допустим, у нас есть пользовательский объект, который мы хотим определить.Некоторые методы этого объекта имеют смысл быть специфичными для экземпляра.И у нас также есть некоторые методы, которые действительно не зависят от экземпляра, что-то вроде публичного статического метода в языке, таком как C # или Java.

Какова стандартная практика для создания этих функциональных определений?В настоящее время я делаю что-то вроде этого:

var User = function(name){
  this.Name = name;
  User.instances.push(this);
};

User.instances = [];
User.doSomething = function(){
  // do something interesting with the set of user instances
};

var me = new User('me');
var you = new User('you');
User.instances; // => [me, you]

Обратите внимание, как «статические» методы определяются в совершенно другом разделе, чем методы prototype / instance.Они просто не чувствуют себя связанными, глядя на код.В моем идеальном мире я мог бы определять все вместе (возможно, внутри User = function () {}?), Чтобы сделать код немного чище и более связанным.Я понимаю, что одна из способностей JS в том, что вы можете делать вещи отдельно и изменять на лету.Просто любопытно, что такое стандартная практика для чего-то подобного.

Иногда я просто вкладываю «статические» определения в некоторые скобки - даже если скобки на самом деле синтаксически не имеют смысла:Есть ли стандартная практика, о которой я не знаю?

1 Ответ

1 голос
/ 07 сентября 2010

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

ИМХО, это не сделает его более читабельным, но из-за теста код будет хуже работать (если вы создадите много таких User объектов)

...