Prototypal по сравнению с функциональным ООП в JavaScript

На этот раз НЕТ хороших инструментов для этого!

Поставщики LINQ для SQLite all находятся в альфа-стадии (например: dblinq2007 ). И это очень большой риск использовать его в коммерческих целях! Так что, возможно, в будущем ...

Если вы не хотите использовать ADO.NET, у вас есть хорошая новость: phxsoftware .

14
задан fuentesjr 12 October 2009 в 22:53
поделиться

2 ответа

«Функциональный» стиль (большинство людей назвали бы это «традиционным ООП»):

  • Преимущество: ООП, которое работает так, как все (или, по крайней мере, Java-программисты) знакомы, включая «действительно» частные методы и переменные
  • Недостаток: Javascript не был разработан для этого типа ООП, так что вам придется перепрыгивать через множество препятствий, чтобы заставить его работать. Эти обручи усложняют отладку, а также увеличивают производительность (хотя точная стоимость будет зависеть от того, как / сколько вы их используете)

Стиль прототипа:

  • Преимущество: Это ООП в том смысле, в каком был Javascript. разработан для.
  • Недостаток: Это не то, к чему вы привыкли (если у вас нет опыта работы с другими языками наследования прототипов)

Так что, если производительность не это огромная проблема для вас, и вы знакомы только с традиционным ООП ... дерзайте (Pro Javascript Design Patterns от APress имеет хороший шаблон для этого). Но если производительность имеет значение или вы беспокоитесь о дополнительном уровне абстракции, усложняющем отладку, найдите время, чтобы прочитать, как работает наследование прототипов; вы станете лучшим программистом на Javascript для этого.

PS Если вас беспокоит отсутствие настоящих "частных" методов со стилем прототипа, я настоятельно рекомендую прочитать: http://snook.ca/archives/javascript/no-love-for-module-pattern Он дает прекрасное объяснение того, почему настоящие «частные» члены на самом деле плохие (по крайней мере, в большинстве сред разработки JS).

14
ответ дан 1 December 2019 в 12:52
поделиться

используйте прототипы для обозначения наследования объекта. довольно сложно продублировать это с помощью функционального кода (я предполагаю, вы имеете в виду шаблон, в котором у вас есть закрытые члены в замыкании и возвращают объект, содержащий ваши открытые члены?)

function Animal() { }
function Cat () { }

Animal.prototype.sleep = function() { /* blah */ };
Cat.prototype = new Animal;
Cat.prototype.meow = function() { /* blah */ };

var simon = new Cat();
simon.sleep();
simon.meow();
7
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: