我想知道在ActionScript 3中是否有方法在类定义的实例之间共享相同的函数(方法),每次只引用相同的函数...即,此示例应该记录{{ 1}},但记录了true
(注意:我希望这样可以减少重复功能)。
false
ActionScript 3语言规范似乎表示存在class A {
function f() {}
}
trace(
(new A).f === (new A).f
)
属性,但未实现。我已经明白个别类有一个原型对象。我特意发现了一个原型属性(可能继承自prototype
/ Class
)并想知道类是否使用元函数来构造(因为它们的类型是"对象&#34 ; ...当我使用typeof Object
)进行测试时。
我的最后一次尝试:
trace(typeof A, typeof Class, typeof Object)
它说class A {}
A.prototype.f = function() {}
trace(
(new A).f === (new A).f
)
不存在。我可以将此类定义为函数(为了将方法移动到原型对象):
f
,但通过这种方式,我无法控制实例成员的访问权限。
答案 0 :(得分:1)
AS3使用Bound methods来确保您的函数内部this
始终指向默认的原始实例对象。
想象一下,您将实例f
的函数a
传递给其他对象b
。当对象b
调用函数f
时,this
名称仍然指向函数范围内的a
- 此引用必须存储在某处。
好吧,你可以将函数分配给你的类的静态属性:
package adnss.projects.evTest
{
public class A {
private var x:Number = 5;
private var _y:Number = 0;
public function A(){}
static public const f = function (p:Number):Number {
this._y = p;
return this.x*p;
}
public function get y():Number { return _y; }
}
}
然后通过显式使用A
访问该静态函数中this
实例的私有属性:
var instance:A = new A();
trace("return:", A.f.call(instance, 3)); //return: 15
trace("instace:", instance.y); //instance: 3
但这对于可能的好处(如果有的话)来说有点棘手。
关于原型。你基本上不在AS3中使用它们。是不是有纪念品:) - read this for more info