Я читал эту страницу (в частности, раздел о фабриках).
В нем упоминается о том, что нельзя использовать ключевое слово new
, чтобы случайно не забыть его. Он предлагает использовать фабрики.
Новый пример страницы:
function Bar() {
var value = 1;
return {
method: function() {
return value;
}
}
}
Bar.prototype = {
foo: function() {}
};
new Bar();
Bar(); // These are the same.
Пример фабрики страницы:
function Foo() {
var obj = {};
obj.value = 'blub';
var private = 2;
obj.someMethod = function(value) {
this.value = value;
}
obj.getPrivate = function() {
return private;
}
return obj;
}
Заводские минусы:
- Он использует больше памяти, поскольку созданные объекты не используют методы прототипа.
- Чтобы наследоваться, фабрика должна скопировать все методы из другого объекта или поместить этот объект в прототип нового объекта.
- Отбрасывание цепочки прототипов только из-за пропущенного нового ключевого слова противоречит духу языка.
Избегание new
для предотвращения проблем в случае, если вы забудете, понятно. Но чего я не совсем понимаю, так это того, что они говорят, что фабричный пример занимает больше памяти, поскольку он не использует функции прототипа. Так почему бы не использовать что-то подобное вместо этого?
Мое решение:
var Foo = function () {
var foo = function () {
};
foo.prototype = {
bar: function () { }
};
return new foo();
};
Вопрос. Я упустил что-то, что делает это решение не лучшим? Убирает ли мое решение перечисленные минусы фабричного метода, почему бы и нет?
new
. - person Bergi   schedule 18.07.2014