Добавьте функции в playerglobal.swc или разрешите компилятору передавать собственные функции - PullRequest
0 голосов
/ 26 октября 2011

Я добавляю множество простых функций в прототипы объектов верхнего уровня (Object, Array, String ...) и задаю 2 вопроса:

Возможно ли добавить функции в классы верхнего уровня во время компиляции?

Если нет, есть ли способ разрешить этой функции компилироваться? Я не хотел бы выключать строгий режим, я стараюсь, и это не очень хорошая идея.

например:

string.removeWhiteSpace();
string.sliceStr("." , "end");
textField.scrollBottom();

это возвращаемая ошибка времени компиляции, потому что такой функции нет, я должен написать ее в фигурных скобках:

string["removeWhiteSpace"]();
string["sliceStr"]("." , "end");
textField["scrollBottom"]();

и мне нравится летать)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

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

Другой способ - привести ваши строки и массивы к Object перед вызовом методов.

Еще лучшим способом было бы не связываться с прототипами объектов верхнего уровня и реализовывать служебные классы, как это делает Adobe - StringUtil, ArrayUtil и т. Д.

1 голос
/ 26 октября 2011

Класс String использует атрибут «final», что означает, что его нельзя переопределить.Поэтому, чтобы ответить на ваш вопрос нет, вы не можете переопределить его в любом случае.Обычно это делается на уровне высшего класса из-за проблем с производительностью.Класс Object использует тип атрибута «dynamic». Все классы, которые не объявляют явный базовый класс, расширяют встроенный класс Object.

Класс Array также использует «dynamic»

.для вашего примера.

string.removeWhiteSpace()

вы могли бы сделать

string.split(" ").join('')

, и это дало бы то, что вы ищете.

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