【发布时间】:2009-03-03 01:26:03
【问题描述】:
在 Actionscript 3 中,为什么当文档说 getDefinitionByName() 返回一个对象:
返回对 name 参数指定的类的类对象的引用。
基于此,我会得出结论,返回的对象应该是 Class 而不是 Object。有人能告诉我为什么不是这样吗?
【问题讨论】:
标签: apache-flex actionscript-3 actionscript flex3
在 Actionscript 3 中,为什么当文档说 getDefinitionByName() 返回一个对象:
返回对 name 参数指定的类的类对象的引用。
基于此,我会得出结论,返回的对象应该是 Class 而不是 Object。有人能告诉我为什么不是这样吗?
【问题讨论】:
标签: apache-flex actionscript-3 actionscript flex3
getDefinitionByName 也可以返回一个 Function,例如 getDefinitionByName('flash.utils.getDefinitionByName')。 不过,这只适用于命名空间级别的函数,不适用于静态类方法。
【讨论】:
尽管有方法签名,getDefinitionByName 确实返回 Class。我认为误导性签名是由于 Class 对象之前存在的方法(当它用于返回匿名/扩展对象实例时)。
【讨论】:
也许 Adobe 认为此函数在 Flash Player 的未来版本中可能会返回不同的值。例如,ActionScript 所基于的标准 ECMAScript 历来使用带有原型的 Function 对象作为类对象的基础。在讨论 ECMAScript 标准的最新版本时,有人建议在运行时“冻结”基于函数的类,以使它们成为编译时 Class 对象。如果您还可以为它们指定定义名称怎么办?此时它们实际上是Class 类型,还是仍然是Function 类型?在我看来,可能是后者。 'Class' 和 'Function' 引用都可以概括为Object,因此返回类型在这种情况下是有意义的。
注意:这个解释纯粹是根据我在ECMAScript specification wiki 和各个委员会成员的博客中阅读的内容进行的推测。
【讨论】: