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

flash,actionscript 3:使用get/set属性从其他类中获取值会创建很多重复的代码,这会有所不同吗?`

  •  0
  • matthy  · 技术社区  · 16 年前

    我在AS3代码中使用get和setter来编辑其他类的值(因为这些变量是共享的),我不喜欢每次更改变量时都在代码中放入stage.sharedvar.isscabble,所以我使用get/set函数。

    见下文

    private function get isScrabble(){return stage.sharedVar.isScrabble;} 
    private function set isScrabble(val){stage.sharedVar.isScrabble = val;}  
    
    private function get superGrid(){return stage.sharedVar.superGrid} 
    private function set superGrid(val){stage.sharedVar.superGrid = val;} 
    
    private function get gridSize(){return stage.sharedVar.gridSize} 
    private function set gridSize(val){stage.sharedVar.gridSize = val}
    
    private function get blokDefaultWidth(){return stage.sharedVar.blokDefaultWidth} 
    private function set blokDefaultWidth(val){stage.sharedVar.blokDefaultWidth = val}
    
    private function get blokDefaultHeight(){return stage.sharedVar.blokDefaultHeight} 
    private function set blokDefaultHeight(val){stage.sharedVar.blokDefaultHeight = val}
    

    正如您所看到的,每次“return stage.sharedvar”和“stage.sharedvar.”+值+“=val”不断混合回来时,它都有很多重复的代码。

    我想知道是否有其他方法来创建这些get/set? 像什么?:

    private function get variable1(){getValue("hisOwnFunctionName")} 
    private function set variable1(val){setValue("hisOwnFunctionName")}
    

    等等??

    谢谢, 马蒂

    3 回复  |  直到 16 年前
        1
  •  1
  •   Ryan    16 年前

    如果我理解您的问题,您只需要获取并设置一个对象的多个属性。根据您的情况,您可以尝试:

    private function setProperty(name:Object,value:Object):void {
        stage.sharedVar[name]=value;
    }
    private function getProperty(name:Object):Object {
        return stage.sharedVar[name];
    }
    private function example():void {
        setProperty("foo","bar");
        trace(getProperty("foo")); //prints: bar
    }
    

    这些函数将允许您设置和访问所需的属性,并且您不必不断更改函数。这确实意味着,如果将超级网格更改为其他类型,则不能只更改函数,必须更改使用get和setproperty的所有地方。但这确实意味着你不必一直写新的函数。

    希望这有帮助。

        2
  •  1
  •   eruciform    16 年前

    如果您使用的是Flex Builder,请从下载Web标准工具包 http://download.eclipse.org/releases/galileo/ 然后用“代码片段”为你写下这些。

        3
  •  1
  •   eruciform    16 年前

    否则,如果您在运行时确实需要在程序中执行此操作,则可以创建一个包装代理类来执行各种操作: http://ltslashgt.com/2008/01/24/proxy-class-as3/

    推荐文章