我有一个带有setter和getter函数的AS类。 我需要调整这个类的一个实例,这样它的setter函数会在将输入分配给局部变量之前处理输入。

或者,在更详细的方式中,在下面的示例中我应该使用什么而不是$$$?

class MyClass{
    private var _legend:Array;
    function set legend(legend:Array):void{
        _legend= legend;
    }
    function get legend():Array{
        return _legend;
    }
    function someFunction():void{
        foo();
    }
}
var mc:MyClass = new MyClass();
mc.someFunction = function():void{
    bar();
}
mc.$$ = new function(legend:Array):void{
    _legend = process(legend);
}
有帮助吗?

解决方案

通常你会将MyClass子类化来修改MyClass的行为(多态)。

class MySubClass extends MyClass {
        function set legend(legend:Array):void{
                // do your checking here. Then call the 
                // setter in the super class.

                super.legend = legend;
        }
}

其他提示

为什么不将实例传递给已处理的输入?

mc.legend = process(legend);

如果无法做到这一点,您可以修改MyClass中的setter并使用可选的布尔值进行处理。

function set legend(legend:Array, flag:bool = false):void{
            _legend = flag ? process(legend) : legend;
}

请注意,原型继承不会将自身限制为特定实例。来自文档:

  

原型继承 - 是以前版本的ActionScript中唯一的继承机制,在ActionScript 3.0中作为备用的继承形式。每个类都有一个关联的原型对象,原型对象的属性由该类的所有实例共享。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top