2010-08-22 56 views
2

我想知道是否有可能在ActionScript2中創建閉包,就像使用Javascript一樣。
這不起作用:是否有可能像使用Javascript一樣在AS2中使用閉包?

var util = function(){ 
    var init = function(){ 
     trace(this + ': util'); // i want to know this thing works! 
     var myUtils = new MyAS2Utils(); // load some stuff 
     var url = myUtils.getURLInSomeReallyCoolWay(); // really, this is all fluff isn't it? 
     myAwesomeButton.onRelease = function(){ 
      getURL(url,"_blank"); 
     } 
    } 
    // and return the goods 
    return { 
     init : function(){ 
      init(); 
     }  
    } 
}(); 

// now call the init funciton 
util.init(); 

我曾嘗試其他方法,但它永遠不會奏效。我希望這是可能的,因爲如果我被迫使用AS2,我想至少有一點樂趣:)
謝謝!
aaron

+0

「這不起作用:」 - 你可以更具體的關於你的*目標*? – 2010-08-22 21:25:18

+0

我的目標是能夠在不調用構造函數的情況下實例化對象。 「這不起作用」意味着編譯我的swf時,對util.init()的調用不起作用。沒有痕跡,沒有button.onRelease,納達。 – mraaroncruz 2010-08-22 21:34:12

回答

1

看來你正在嘗試使用actionscript,就好像它是JavaScript風格的面向對象編程。你需要在javascript中使用閉包的原因是JavaScript缺少actionscript和其他古典語言的命名空間的能力。它是在javascript中創建受保護屬性和方法的唯一方法。

我強烈建議你爲你的util對象創建一個外部類,這樣它們可以完全重用於其他項目。但是,如果你想創建一個單一的,臨時的對象,你可以這樣做:

var util = new Object(); 
    util.myUtils = new BlaBla(); 
    util.property = myUtils.blaBlaBla(); 
    util.init = function() { 
     //Do some stuff here 
    } 
+0

你的例子真的很奇怪。 但我同意你在說什麼。有幾種方法可以在AS2中創建私人道具和方法,例如:外部類。我只是想知道你是否可以用閉包來實現它。我他們嚇壞了。 – mraaroncruz 2010-08-22 23:22:54

相關問題