是否可以像在Javascript中一样使用AS2中的闭包?

时间:2010-08-22 21:22:34

标签: javascript actionscript actionscript-2 closures

我想知道是否可以在ActionScript2中创建一个闭包,就像在Javascript中一样 这不起作用:

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,我想至少对它有一点乐趣:) 谢谢!
亚伦

2 个答案:

答案 0 :(得分: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
    }

答案 1 :(得分:1)

本文阐述了如何使用匿名函数来传递范围 - 这是我一开始真正想要的 - 我只是不知道它;) http://studiokoi.com/blog/article/making_anonymous_functions_and_closures_work_in_actionscript_20