Руководство по actionscript. часть 2, стр. 147
На русском языке она будет звучать так: Обращение к несуществующему свойству orange.
Компилятор не может найти переменную или метод (то есть «свойство») по имени orange, поскольку в области видимости метода-конструктора Items не существует переменной или метода с простым идентификатором orange. Переменные fruit: : orange и color: : orange уточняются с помощью пространств имен, поэтому они оказываются недоступны при попытке обратиться к ним с применением неуточненного идентификатора. И все-таки далее, в разд. «Открытые пространства имен и директива use namespace», мы познакомимся с упрощенным способом обращения к уточненным идентификаторам без использования уточняющего пространства имен.
Очевидно, что в листинге 17.1 не показана полнофункциональная игра, но этот код призван дать вам представление о базовом синтаксисе и использовании пространств имен. Мы завершим создание нашей игры далее в этой главе.
На этом начальном этапе разработки нашей игры вы могли бы поинтересоваться, почему вместо использования пространств имен мы не можем просто определить переменные с длинными именами, например orangeFruit и orangeColor. Или почему нельзя разделить оба вида oranges, присвоив их двум отдельным массивам, как показано в следующем коде:
var fruitList:Array = ["orange", "apple", "banana"]; var colorList:Array = ["orange", "red", "blue"];
Описанные варианты имеют право на жизнь. Фактически, учитывая выбранный уровень упрощений, нам действительно было бы лучше использовать массивы или более длинные имена переменных. Но не стоит пока терять веру в пространства имен; мы собираемся строить системы с более сложными сценариями использования.
Доступность пространств имен
Как и в случае с определениями переменных и методов, определения пространств имен могут быть изменены с помощью модификаторов управления доступом publ i с, internal, protected и private. Местоположение определения пространства имен в сочетании с модификатором управления доступом этого определения указывают, где может быть использован результирующий идентификатор пространства имен.
Вот несколько основных правил, которые помогут решить, где разместить ваши пространства имен.
? Если пространство имен должно быть доступно в любом месте программы или в группе классов, определяйте его на уровне пакета.
? Если вам требуется пространство имен, которое задает видимость переменных и методов внутри одного класса, определяйте его на уровне класса.
? Если пространство имен будет применяться лишь иногда внутри функции и вы знаете идентификатор URI этого пространства имен, но не можете обращаться к нему напрямую, определяйте пространство имен на уровне функции.
Рассмотрим несколько примеров, начав с пространств имен, задаваемых на уровне пакета.