Flash, ActionScript 3: использование свойств get / set для получения значений из других классов создает много дублирующего кода, может ли он отличаться? - PullRequest
0 голосов
/ 04 июля 2010

Я использую get и сеттеры в своем коде as3 для редактирования значений другого класса (потому что эти переменные являются общими). ​​Я не хотел бы ставить stage.sharedVar.isScrabble в своем коде каждый раз, чтобы изменить переменную, поэтому я использовал get/ set functions

см. ниже

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 / sets?что-то вроде?:

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

и т. д. ??

спасибо, Матти

Ответы [ 3 ]

1 голос
/ 04 июля 2010

В противном случае, если вам действительно нужно сделать это в программе во время выполнения, вы можете создать прокси-класс-оболочку для выполнения всех видов операций: http://ltslashgt.com/2008/01/24/proxy-class-as3/

1 голос
/ 05 июля 2010

Если я понимаю ваш вопрос, вы просто хотите получить и установить несколько свойств для объекта.В зависимости от вашей ситуации вы можете попробовать:

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
}

Эти функции позволят вам установить и получить доступ к нужным вам свойствам, и вам не придется постоянно изменять функции.Это означает, что если вы измените superGrid на что-то другое, вы не сможете просто изменить функцию, вам придется менять ее везде, где вы используете get и setProperty.Но это значит, что вам не нужно продолжать писать новые функции.

Надеюсь, это поможет.

1 голос
/ 04 июля 2010

Если вы работаете в Flex Builder, загрузите стандартный веб-инструментарий с http://download.eclipse.org/releases/galileo/ и используйте «фрагменты», чтобы написать их для вас.

...