Использование шаблонов наследования в JavaScript - PullRequest
8 голосов
/ 13 сентября 2010

Из моего опыта JavaScript делает это:

  • манипулирование DOM или другими хост-объектами
  • добавление обработчиков событий
  • делает Ajax

Поскольку я начал копаться в наследовании прототипа, я хотел бы знать, как оно на самом деле используется на практике. Какие варианты использования?

Кто-нибудь здесь активно использует шаблоны наследования? Для чего?

(я понимаю, что есть много ответов на мой вопрос - я просто хотел бы услышать некоторые из них, чтобы почувствовать использование наследования в JavaScript)

Ответы [ 5 ]

2 голосов
/ 14 сентября 2010

Мой опыт работы с jQuery (и JavaScript до него) показал, что наследование прототипов не так полезно, как я ожидал. Он использует, но не является принципиально важным для языка.

В Javascript, если вы хотите вернуть объект методом foo:

return { 
  foo: function() { 
    alert('You called foo!'); 
  }
};

А вызывающие абоненты могут рассматривать такие объекты как полиморфные, то есть они могут вызывать foo, не заботясь о том, что это за «тип» объекта. Нет необходимости в наследовании.

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

Но с точки зрения пользователя jQuery, прототипы не особенно важны. Он может быть переписан, чтобы не использовать их, и он все равно будет работать (но может использовать намного больше памяти).

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

У Дугласа Крокфорда есть несколько интересных статей о различном наследовании:

http://javascript.crockford.com/inheritance.html

http://javascript.crockford.com/prototypal.html

http://javascript.crockford.com/private.html

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

Чтение их (они короткие) может не дать вам всех ответов, которые вы хотите, но я подозреваю, что это заставит вас задуматься и увидеть JavaScript немного по-другому. Тем не менее, Крокфорд всегда очень уверен в своем письме, но я не думаю, что вы должны принять его слово как закон.

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

По мере того, как все больше и больше кода пишется специально для мобильных устройств под управлением iOS, Android и др., А также по мере развития парадигмы приложения, наблюдается сдвиг в сторону придания все большей сложности и логики библиотекам JavaScript, работающим на устройствах..

Модель объектов / наследования javascript предоставляет разработчику очень гибкий набор инструментов для разработки динамических и сложных приложений.

Модель наследования JavaScript позволяет:

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

Это похоже на классовые и смешанные функции ruby ​​и открывает массу новых шаблонов проектирования и наследования, из которых только немногие были изобретены или документированы.

jqueryявляется лучшим примером зрелой библиотеки JavaScript. текст ссылки прототип и сценарий другие.

0 голосов
/ 05 октября 2010

Вероятно, лучшим примером наследования, используемым в JavaScript, который я знаю, является библиотека Ext. Вместо jQuery, который в основном является большим объектом, который сам расширяется, Ext демонстрирует более типичный подход к наследованию, встречающийся в программах, использующих объектно-ориентированные парадигмы.

Ext - это библиотека, состоящая из множества настраиваемых объектов, которые можно использовать различными способами. Большинство объектов обобщены в абстрактные классы. Посмотри.

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

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

0 голосов
/ 13 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...