【发布时间】:2017-03-06 05:09:48
【问题描述】:
我想知道在 ActionScript 3 中是否有一种方法可以在类定义的实例之间共享相同的函数(方法),每次只引用相同的函数...即,此示例应记录 true,但是登录false(注意:我希望这可以减少重复功能)。
class A {
function f() {}
}
trace(
(new A).f === (new A).f
)
ActionScript 3 语言规范似乎表明存在 prototype 属性,但未实现。我知道各个类都有一个原型对象。我专门找到了一个原型属性(可能继承自Class/Object)并且想知道类是否使用元函数来构造(因为它们的类型是“对象”......当我用typeof进行测试时:@ 987654327@).
我的最后一次尝试:
class A {}
A.prototype.f = function() {}
trace(
(new A).f === (new A).f
)
它说f 不存在。我可以将这个类定义为一个函数(以便将方法移动到原型对象):
function A() {}
A.prototype.f = function() {}
,但是这样我无法控制实例成员的访问。
【问题讨论】:
-
看来你已经回答了你自己的问题,
new A().f === new A().f是false。但是:I'd want this to reduce duplicating functions-- 为什么你想以这种方式减少“重复功能”?您认为这将是性能优化吗?它是否解决了您遇到的一些问题,例如比较两个对象的相等性? -
@Aaron 为什么要以这种方式减少“重复功能”?,正是为了获得性能优化。 它是否解决了您遇到的一些问题,例如比较两个对象的相等性?,不是这个比较,而是减少每个实例创建的函数。如果我要多次使用各种方法构造一个类,那么它可能会很慢,不是吗?
-
@Aaron 我的意思是,不必为每个实例创建类定义的每个实例方法,它可以只是在类原型上并在对象之间共享实例。如果
new A().f === new A().f给了我false,那么它只是意味着这两个函数引用指向不同的函数(这意味着该方法可能被绑定或者是的,重新创建)。 -
@handoncloud 类方法绑定到类实例,这正是当您 == 比较方法引用时它们输出 false 的原因。当您创建一个类的新实例时,类方法不会“复制”或复制或其他。请不要想太多。如果您碰巧遇到代码运行速度过慢的特定问题,请优化代码,总有很多方法。
-
@Organis 不,我没有任何代码运行缓慢。我还没有计划任何东西。而且我认为绑定方法是个坏主意
标签: actionscript-3