Почему объект возвращается из getDefinitionByName ()? - PullRequest
1 голос
/ 03 марта 2009

В ActionScript 3, почему getDefinitionByName () возвращает объект, когда документы говорят:

Возвращает ссылку на объект класса класса, указанного параметром name.

Исходя из этого, я бы пришел к выводу, что возвращаемый объект должен быть Class вместо Object. Может кто-то просветить меня, почему это не так?

Ответы [ 3 ]

7 голосов
/ 09 марта 2009

getDefinitionByName также может возвращать функцию, такую ​​как getDefinitionByName ('flash.utils.getDefinitionByName'). Это работает только для функций уровня пространства имен, но не для статических методов класса.

6 голосов
/ 03 марта 2009

Несмотря на сигнатуру метода, getDefinitionByName возвращает Класс . Я думаю, что вводящая в заблуждение подпись происходит из-за метода, существующего до объекта Class (когда он использовался для возврата экземпляра анонимного / расширенного объекта).

2 голосов
/ 05 марта 2009

Возможно, Adobe считала, что эта функция может возвращать другие значения в будущей версии Flash Player. Например, ECMAScript, стандарт, на котором основан ActionScript, исторически использовал Function объекты с прототипами в качестве основы для объектов класса. Во время обсуждения новейших версий стандарта ECMAScript были предложены «заморозить» классы на основе функций во время выполнения, чтобы превратить их во что-то вроде объектов Class времени компиляции. Что если бы вы могли также указать для них имя определения? Они на самом деле имеют тип Class на данный момент, или они все еще или типа Function? Наверное, позже, на мой взгляд. Обе ссылки 'Class' и 'Function' могут быть обобщены как Object, так что возвращаемый тип имеет смысл в этом контексте.

Примечание. Это объяснение является чисто предположением, основанным на том, что я прочитал в вики спецификации ECMAScript и блогах различных членов комитета.

...