В JavaScript мы можем назначить свойства прототипу функции или напрямую установить его прототип:
var MyClass = function() { };
// The "property" form...
MyClass.prototype.foo = function() { ... };
MyClass.prototype.bar = function() { ... };
MyClass.prototype.gah = function() { ... };
// OR the "assignment" form...
MyClass.prototype = {
foo:function() { ... },
bar:function() { ... },
gah:function() { ... }
};
Я лично предпочитаю форму назначения, потому что вы можете легко обернуть объект в закрытии (например, скрыть объекты "private"), а если позже вы решите изменить имя "MyClass", вам нужно найти только два места а не потенциально десятки. (Конечно, то же самое можно сказать и для формы "свойство", используя и вызывая функцию, которая принимает существующий прототип в качестве аргумента, но форма "присваивания" кажется более прямой, на мой взгляд.)
Есть ли веская причина использовать одну форму вместо другой?
[изменить]
Как отмечает комментатор @Raynos, вторая форма (присваивание) сжимает атрибут prototype.constructor
, который должен быть установлен в функцию MyClass (и по умолчанию используется в первой форме [свойство]). Существуют ли какие-либо реальные недостатки (кроме того, что свойство не задано)?