You don't know js(up & going)
this и прототипы объектов
Download 424.95 Kb. Pdf ko'rish
|
You don\'t know JS(up & going)
this и прототипы объектов
Пожалуй, одним из самых распространенных и устойчивых ложных фактов о JavaScript является то, что ключевое слово `this` указывает на функцию, в которой оно появляется. Ужасное заблуждение! Ключевое слово `this` динамически привязывается, основываясь на том, как выполняется функция; выясняется, что есть четыре простых правила, помогающих понять и полностью определить привязку `this`. Тесно связан с ключевым словом `this` механизм прототипов объектов, который является цепочкой поисков свойств, похожей на то, как обнаруживаются переменные в лексической области действия. Но обертка прототипов хранит другой большой промах с JS идея эмуляции (замены) классов и так называемое наследование через прототипы. К сожалению, желание привнести мышление классами и наследованием в JavaScript — это просто наихудшая вещь, которую вы могли бы сделать; несмотря на то, что синтаксис может вводить вас в заблуждение, будто есть что-то подобное классам, в действительности механизм прототипов фундаментально противоположен по своему поведению. Что является предметом спора, так это то, лучше ли проигнорировать несоответствие и притвориться, что вы реализуете "наследование", либо все-таки, что является более подходящим, изучить и принять то, как на самом деле работает система прототипов объектов. Последнее подходяще именуется "делегированием поведения". Это больше, чем синтаксическое предпочтение. Делегирование — это совершенно другой и более мощный шаблон проектирования, который сам по себе заменяет необходимость проектировать классы и их наследование. Но эти утверждения полностью противоречат почти каждому второму посту в блогах, книгам и конференциям по этой теме на всем протяжении существования JavaScript. Претензии, которые я предъявляю касаемо делегирования в противовес наследованию, идут не от нелюбви к языку и его синтаксису, а от желания видеть правильное применение истинной возможности языка и свести на нет бесконечные путаницу и недовольство. Но объяснение необходимости рассматриваемых прототипов и делегирования гораздо более запутанно, чем то, которое я тут представил. Если вы готовы переосмыслить всё, что, как вы думаете, вы знаете о "классах" и "наследовании" в JavaScript, то я даю вам шанс "принять красную таблетку" (*Матрица*, 1999 и проверить главы 4 6 книги *this & прототипы объектов* этой серии. Download 424.95 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling