Область видимости AS3 с аргументами функции - PullRequest
0 голосов
/ 27 января 2012

Мне не хватает знаний по поводу нижеприведенного.

Возьмите этот класс:

public class MyClass
{
    public var width:int = 10;
    public var height:int = 10;

    public function MyClass(width:int, height:int)
    {
        trace(width, height);
    }
}

Выходными данными всегда будут предоставленные значения ширины и высоты, а не ширины и высотысвойства, которые принадлежат MyClass.Вы также никогда не получите сообщение об ошибке, даже если кажется, что должно быть одно для конфликтующих имен свойств.

Почему / как это работает?Кроме того, ширина и высота, определенные выше моего конструктора, все еще как-то доступны в моем конструкторе?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Это работает, потому что имена параметров "затеняют" имена переменных полей, т.е. компилятор предполагает, что вы имели в виду их.

Вы можете получить доступ к участникам, используя this.width и this.height.Это также де-факто синтаксис, в который компилятор преобразует все неявные вызовы членов в байтовый код (если бы не было локальной переменной с тем же именем, width автоматически преобразовывалось бы в this.width).

Кстатинекоторые IDE, такие как FDT, позволяют устанавливать предупреждение или сообщение об ошибке для теневого копирования имени.

1 голос
/ 27 января 2012

Сначала компилятор будет отдавать приоритет локально переменным.

В вашем случае, если вы хотите, чтобы члены класса vars вам нужно было указать "this".

Параметры (ширина и высота) являются полностью разностными переменными, а не членами класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...