2

在ActionScript 3中有一種方法(黑客 - 也許通過方括號,也許通過克隆一個對象,也許通過原型,也許通過命名空間,...)來更改私有或受保護班級成員?訪問受保護或私有屬性

舉例來說,如果我有一個IconToast類由someLibrary.swc交付,我知道它有一個

protected var windowOptions:WindowOptions; 

我可以改變它以某種方式?我試過很多東西,例如:

 var errorToast:IconToast = new IconToast(); 
     errorToast.addButton("Dismiss"); 
     errorToast.message = "Error when connecting"; 
     errorToast['windowOptions'].timeout = 10 * 1000; 
     errorToast.show(); 

(給我運行時錯誤的ReferenceError:錯誤#1069:房產windowOptions不IconToast發現沒有默認值)。

+0

意味着它只能由擴展它的類來訪問。你不擴展它,但創建它的一個變量實例。 –

回答

6

通過擴展的基類,並給予私人/受保護方法/屬性等

public class MyIconToast extends IconToast 
{ 
    public function getWindowOptions():WindowOptions 
    { 
     return windowOptions;//here you can access protected (not private though:); 
    } 
} 

私人它可能不是可能的,但類似於上述溶液在一定程度上也可以是公共訪問執行此做

問候

+0

這是最好的方法。另一種方法是在加載swf之前修改ABC。 – ansiart

1

不,有沒有辦法直接改變其修改(這就是爲什麼它被定義爲public,protected和private,對吧?)。 Lukasz'Severiaan'Grela的解決方案是可以的,但它可以更好:使用getter/setter來獲取讀/寫功能。

public function set windowOption(option:int):void; 

public function get windowOption():int; 

和私營屬性只屬於自己的類,所以如果他們包裝成SWC,你看不到任何人:d。

相關問題