代码之家  ›  专栏  ›  技术社区  ›  Dogmatixed

从AS3中的静态函数访问非静态函数时出现问题

  •  0
  • Dogmatixed  · 技术社区  · 15 年前

    我有一个类,其中包括一个下拉菜单。为了节省空间,而且由于菜单的内容永远不会更改,我为整个类创建了一个静态数据提供程序,用于填充每个实例菜单。我希望用实际函数填充列表,比如:

    tmpArr.push({label:"Details...", funct:openDetailsMenu, args:""});
    

    简单的解决方案是只传递字符串,然后使用switch语句来调用基于该字符串的函数,但是这太大、太难看、太不美观,而且很难维护,特别是如果某个东西继承自这个类的话。 更简单的解决方案是使DataProvider成为非静态的,但是我想知道是否有其他人有一个好的方法来处理这个问题?使静态函数能够看到非静态函数?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   longstaff    15 年前

    好的,使事物成为静态的基本原因是如果您想使它独立于实例,例如as3中的Math函数(您调用Math.min(),而不是var Math=new Math();math.min()…)这对于参考、重复计算、简单操作(将10添加到x值)等非常有用。

    您需要做的是按名称获取函数(例如,对象“functionname”起作用),在数组中生成注释性函数,或者向静态函数添加回调方法类似于以下内容:

    public static function doAction(object:Menu, event:String){
        if(event == "details") object.openDetailsMenu() ;
    }
    

        2
  •  0
  •   David Morrow    15 年前

    您可以只存储一个对实例的静态引用,在本例中为实例有点像贫民区的单身汉)只是要小心不要在类被实例化之前调用静态方法。

    /// in your constructor define a static reference handle to the instance
    public function ClassName(){
       _instance = this;
    }
    
    public static function doSomethingStatic(){
       var varValue = ClassName._instance.someInstanceVariable;
    }