Во Флэш существует ряд встроенных объектов, таких как
MovieClip, String, Array, Color.
Каждый из них имеет свои методы и свойства исчерпывающим образом описанные в руководстве, прилагаемом к программе. Но разве вам никогда не хотелось поиграть с ними в Доктора Франкенштейна? Например, сделать так, чтобы любой мувик получил возможность программного отражения по горизонтали и вертикали, ну что-то типа
ball.flipX(). Другими словами, чтобы любой мувик автоматически наследовал ваш
flipX() метод.
На самом деле это сделать не просто. А очень просто! Достаточно знать правильный синтаксис, и вы сможете добавлять собственные методы к прототипам встроенных объектов. Например, вот код добавляющий метод
flipX() к классу
MovieClip:
MovieClip.prototype.flipX = function () {
this._xscale = -this._xscale;
}; |
Ухххуу!! Теперь вы можете флипнуть (отразить) любой мувик простым вызовом ВАШЕГО метода:
mc.flipX();
А вот и метод flipY() для сравнения:
MovieClip.prototype.flipY = function () {
this._yscale = -this._yscale;
}; |
В общем виде добавление метода к встроенному объекту происходит так:
BuiltinObject.prototype.method = function () {
// ну а здесь пошел наш код
}; |
Перезаписываем встроенные методы.
Вы можете не только добавлять новые методы к встроенным объектам, но и перезаписывать уже встроенные методы.
Для перезаписи (переназначения) метода используется тот же синтаксис что и при добавлении нового. Например, метод Array.push() выполняется очень-очень медленно. А мы возьмем и заменим его следующим кодом:
Array.prototype.push = function (data) {
this[this.length] = data;
}; |
Вышеупомянутый код используется для добавления
data в конец текущего массива. Заметьте, что ключевое слово
this используется для обращения к текущему объекту из метода.
Расширяем функционал статических встроенных объектов.
Расширение некоторых встроенных объектов отличается от вышеописанного. «Статичные» объекты (
Math, Key, Mouse) не имеют прототипированных свойств, поэтому вы должны добавлять методы непосредственно к объекту. Например, вот как вы должны записать функцию
Math.distance() для нахождения дистанции между двумя точками:
Math.distance = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt (dx*dx + dy*dy);
}; |
Вот общий синтаксис:
StaticObject.method = function () {
// code
}; |
Не используйте следующий синтаксис:
| StaticObject.__proto__.method = function () |
Использование
_proto_ в этом контексте добавляет метод к
Object.prototype.