2010-08-22 82 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

相关问题