Мой вопрос касается непосредственно ActionScript 3, хотя он может отображаться и на других языках.
Рассмотрим глобальную функцию trace , обнаруженную в AS3.Вызов метода не требует импорта и доступен во всех классах.
class A {
public function A() {
trace("Hello, A!"); // Hello, A!
}
}
А что если я создам свой собственный метод класса с тем же именем?В AS3, если у меня есть метод класса trace , а затем выполняется вызов trace в другом месте моего класса, вызов метода класса выполняется через глобальную функцию.По сути, я заблокировал свою способность вызывать метод глобальной трассировки.
class B {
public function B() {
trace("Hello, B!"); // no output
}
public function trace(s:String):void {
// do something else.
}
}
Теперь я знаю очевидный ответ: «не создавайте метод класса с именем trace * 1016».* «.Но что, если я не знаю о существовании глобальной функции trace ?Или что, если у меня есть желание "переопределить" или "заблокировать" глобальную функцию?Это так плохо программирование?Или это просто еще один пример того, как AS3 является плохим объектно-ориентированным языком?