是否为实例单独创建了类方法?

时间:2017-03-05 14:51:33

标签: actionscript-3

我想知道在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

,但通过这种方式,我无法控制实例成员的访问权限。

1 个答案:

答案 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