アクションスクリプトで実行時にセッター関数をオーバーライドするにはどうすればよいですか?
-
03-07-2019 - |
質問
セッターおよびゲッター関数を持つASクラスがあります。 このクラスのインスタンスの1つを調整して、セッター関数がローカル変数に割り当てる前に入力を処理するようにする必要があります。
または、より詳細な方法で、以下の例で$$$の代わりに何を使うべきですか?
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でセッターを変更し、オプションのブール値を使用して処理を行うことができます。
function set legend(legend:Array, flag:bool = false):void{
_legend = flag ? process(legend) : legend;
}
プロトタイプの継承は、特定のインスタンスに制限されないことに注意してください。ドキュメントから:
プロトタイプ継承-ActionScriptの以前のバージョンで唯一の継承メカニズムであり、ActionScript 3.0での代替形式の継承として機能します。各クラスにはプロトタイプオブジェクトが関連付けられており、プロトタイプオブジェクトのプロパティはクラスのすべてのインスタンスで共有されます。
所属していません StackOverflow