Методы прототипа не работают на textField - PullRequest
0 голосов
/ 26 января 2011

Это не имеет никакого смысла для моего слабого мозга, и я достиг своего предела googlefu.

У меня есть несколько методов-прототипов, которые я использую для ускорения разработки, и большинство из них привязаны к DisplayObject или InterActiveObject. Вот пример одного такого прототипа:

DisplayObject.prototype.$click = function(clicked:Function, released:Function = null):void{
    this.addEventListener(MouseEvent.MOUSE_DOWN, function():void {
            clicked();
        });

    if(released != null){
        this.addEventListener(MouseEvent.MOUSE_UP, function():void {
            released();
        });
    }
}

Если я назову любой movieClipInstance.$click(someFunction), он связывается правильно. Однако, если я попытаюсь сделать это на экземпляре TextField, это даст мне следующую ошибку во время компиляции. Call to a possibly undefined method $click through a reference with static type flash.text:TextField.

Согласно ссылке, TextField наследует DisplayObject, но просто чтобы быть уверенным, что я явно переопределил свой прототип для TextField s. Все та же ошибка. (

Ответы [ 2 ]

1 голос
/ 26 января 2011

Вы всегда можете расширить TextField и добавить туда методы. Фактически, вам следует подумать о том, чтобы сделать это и для всех других объектов: расширить MovieClip, Sprite или любой другой объект DisplayObject, к которому вы хотите добавить метод $ click. Затем позвольте всем вашим другим объектам наследовать ClickMovie, ClickSprite и т. Д. Вместо общих классов. Не должно быть много кода для написания, но ваше приложение будет значительно быстрее и безопаснее.

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

Подробное объяснение того, как наследование работает в AS3, можно найти здесь .

0 голосов
/ 26 января 2011

Очевидно, что методы-прототипы можно назначать только классам, объявленным с ключевым словом dynamic.Пошел к ссылке, чтобы посмотреть, соответствует ли мой опыт этому утверждению и достаточно ли TextField определяется как public class TextField.MoveClip с другой стороны определяется как public dynamic class MovieClip

Мне кажется немного странным, что не динамический класс все еще не может получить доступ к методам-прототипам своих динамических предков.Наследование снова поражает!

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