2009-03-02 4 views
1

저는 setter 및 getter 기능을 가진 AS 클래스가 있습니다. 이 클래스의 인스턴스 중 하나를 조정하여 setter 함수가 로컬 변수에 할당하기 전에 입력을 처리하도록해야합니다.actionscript에서 런타임시 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); 
} 

답변

0

일반적으로 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; 
     } 
} 
+0

다른 말로하면, 내가 찾고있는 것이 불가능합니다 ...? –

+0

내게있어 당신이하고있는 일은 '프로토 타입'을 해킹하는 것처럼 보입니다. 개인적으로 나는 다른 방법이 없다면 그렇게하지 않을 것입니다. 당신의 문제는 제가 이해하는 한 상속으로 해결할 수 있습니다. – Luke

0

처리 된 입력을 처리 된 입력으로 전달하지 않는 이유는 무엇입니까? 이것이 가능하지 않다면

mc.legend = process(legend); 

, 당신은 MyClass에있는 세터를 수정하고 처리를 수행하는 선택적 부울 수 있습니다.

프로토 타입 상속은 특정 인스턴스로 제한되지 않습니다. 설명서에서 :

프로토 타입 상속 - 이전 버전의 ActionScript에서 유일한 상속 메커니즘이며 ActionScript 3.0에서 상속의 대체 양식 역할을합니다. 각 클래스에는 연관된 프로토 타입 객체가 있으며 프로토 타입 객체의 속성은 클래스의 모든 인스턴스에서 공유됩니다.

관련 문제