Macromedia Flash 5. Объектно - ориентированное программирование




Extends. Специальное ключевое слово - часть 3


extends( SuperClass, SubClass )

К сожалению, догадаться о таком синтаксисе непросто. Его нужно заучить. Мы конечно могли бы поменять местами аргументы и написать extends( SubClass, SuperClass ), но разница была бы небольшая. Просто решим и запомним, что сперва следует высший класс ( extends(Pet, Dog) ) и не будем больше об этом думать. К счастью сам метод оказывается на редкость простым (по крайней мере, до тех пор, пока нам не откроется страшная правда!).

/** Extends ------------------------*/ extends = function( superClass, subClass ) { // связь с родителем subClass.prototype.__proto__ = superClass.prototype; }

Кто-то может сказать: "Много шума из ничего". Но вписывать такую строку после каждого класса так же удобно, как и вызывать метод extends. Нужно только запомнить несколько правил. Во-первых, эта часть всего лишь создаёт наследование и не занимается обработкой запущенных конструкторов. Во-вторых, она работает лишь частично. Первая проблема легко преодолима, но вот вторая серьёзна, глубока и загадочна. Начнём с десерта - того, что проще всего.

Вообразите себе следующий сценарий: Жучка очень часто пользуется вашим методом extends, ей это нравится. Однажды она использовала его в клипе, загруженном в _level0. Метод extends был уничтожен, программа не работает, в общем, Жучка за внучку, внучка за бабку, бабка за дедку, дедка за репку - тянут-потянут, вытянуть не могут. Значит, по всей вероятности, _root - не самое подходящее место для спецфункции. Решений может быть несколько и как всегда у всех есть свои "плюсы" и "минусы":

Тиха украинская ночь, но сало нужно перепрятать: Мы можем поместить спецфункию в _level44497.

  • Плюсы: Это просто запомнить, так как это наибольшее простое число перед 0xFFFF (65535). А также нашу спецфункцию можно будет вызывать простым выражением _level44497.extends(Pet, Dog);
  • Минусы: Кто-нибудь всё равно может загрузить клип в _level44497, раз уж это место такое примечательное.
  • Если хочешь получше спрятать, положи на самое видное место: Мы можем запихнуть её в Object.prototype.




      Содержание  Назад  Вперед