AS3 - Ссылки на аргументы, это плохо? - PullRequest
0 голосов
/ 17 июля 2011

Я прочитал вопрос о stackoverflow (не смог найти его сейчас) о том, как переменные в методе могут быть доступны только в этом методе, но код все еще работает с ответом, являющимся аналогом гостиничного номера. В AS3 я считаю, что все, что не примитивно, передается в качестве ссылки. Итак, следующий код будет таким же, как этот вопрос, и не гарантированно будет работать?

public class Testy {
    private var foo:Array;

    public function Testy(input:Array) {
        // Allow the whole class to access it
        foo = input;
    }

    public function traceFoo(){
        trace(foo);
    }

}

Теперь, foo будет ссылкой на входной аргумент в конструкторе класса. Это безопасный код / ​​хорошая практика? Спасибо!

Ответы [ 3 ]

1 голос
/ 17 июля 2011

То, что вы описали, является свойством и связано с инкапсуляцией объектно-ориентированного программирования.

Это выставит геттер и сеттер:


package
{
    import flash.display.Sprite;

    public class Testy extends Sprite
    {
        private var _foo:Array;

        public function get foo():Array
        {
            return _foo;
        }

        public function set foo(value:Array):void
        {
            _foo = value;
        }

        public function Testy()
        {
            super();
        }

    }
}
1 голос
/ 17 июля 2011

Да, это безопасная / хорошая практика кода, если вы не хотите манипулировать исходным массивом.Если вы хотите манипулировать исходным массивом, разрешите публичный доступ к массиву, сделав его публичной переменной или используя общедоступный метод получения / установки.

0 голосов
/ 17 июля 2011

Также лучше возвращать _foo.concat () в геттере, чтобы не нарушать инкапсуляцию.

...