Адресное пространство
Эту тему имеет смысл рассмотреть поподробнее, хотя она и была затронута в последнем примере. Все имеет свое рабочее пространство, которому присваивается имя. Это отличный способ организовать вашу программу, поскольку именно таким образом люди организуют свое окружение в реальном мире. Возьмите, например, ваш адрес. Скорее всего, он выглядит так - имя, номер дома, название улицы, район, город, область, страна. Такой системой пользуется почта. В свое время, так писались и программы - используя огромное количество "имен". По мере того, как они росли в размерах (подобно городам), такая система перестала быть практичной - для организации сложных сообществ потребовалась более совершенная система. Одним из основных преимуществ ООП является именно тот факт, что оно позволяет организовывать сложные вещи. Всему присваивается свой "адрес". По адресу можно сделать некоторые выводы. Так, в объектно-ориентированных языках не существует глобальных переменных (характеристик, которые вы может видеть отовсюду). Для этого есть весомые причины - вы используете объектно-ориентированные технологии именно потому, что вы хотите организовывать вещи. Почта просто не смогла бы нормально работать, если бы люди использовали бы вместо адреса одни только имена - именно так работают и компьютерные программы.
Ключевая концепция в объектно-ориентированном программировании: Исключительно важно всегда продумывать, куда именно будут направляться объекты в вашей программе. Как именно будет выполнена конкретная задача, зачастую значительно менее важно по сравнению с тем, где она будет выполнена. Представьте себе парочку, занимающуюся любовью в общественной столовой... Вот уж действительно - не так важно "как", как "где" - тот самый случай.
Возможно, вы все это уже знаете из опыта использования Flash. Именно так работает "целеуказание" клипов. Возьмите клип с именем personA и включите в него клип под названием favs. Теперь, из линейки personA (изнутри контейнера personA), при вызове this._x на выходе будет свойство _x, клипа personA. Если вы вызовете this.favs._x, на выходе будет свойство _x, клипа personA.favs. Если вы создаете свойство this.name="Bob", его значение изнутри клипа favs не будет видно (если только не использовать _parent - всегда ведь найдется обходной путь!). Такое сходство неслучайно - клипы являются таким же типом объекта, как и все остальное.