Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования javascript 16.02.12.doc
Скачиваний:
7
Добавлен:
31.08.2019
Размер:
2.86 Mб
Скачать

Добавление и удаление свойств

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

Отличия. Резюме.

В таблице дано краткое резюме по некоторым отличительным особенностям языков. Остальная часть данной главы посвящена деталям использования конструкторов и прототипов языка JavaScript для создания иерархии и делаются сравнения с аналогичными действиями в Java.

Таблица 8.1 Сравнение объектных систем языков на базе классов (Java) и языков на базе прототипов (JavaScript)

На базе классов (Java)

На базе прототипов (JavaScript)

Класс и экземпляр это разные сущности.

Все объекты являются экземплярами.

Класс определяется в определении класса; инстанциация (создание экземпляров) производится методами-конструкторами.

Набор объектов создаётся и определяется функциями-конструкторами.

Одиночный объект создаётся операцией new.

То же самое.

Иерархия объектов создаётся через использование определения класса для определения подклассов существующих классов.

Иерархия объектов создаётся путём присвоения объекта как прототипа, ассоциированного с функцией-конструктором.

Свойства наследуются по цепочке классов.

Свойства наследуются по цепочке прототипов.

Определение класса специфицируетвсе свойства всех экземпляров данного класса. Свойства нельзя добавлять динамически на этапе прогона.

Функция-конструктор или прототип специфицируют начальный набор свойств. Свойства могут добавляться динамически отдельному объекту или целому набору объектов.

Пример Employee

В остальной части данной главы используется иерархия employee, показанная на рисунке.

Рисунок 8.1 Простая иерархия объектов

В этом примере используются следующие объекты:

  • Employee имеет свойства name (значение по умолчанию - пустая строка) и dept(значение по умолчанию - "general").

  • Manager базируется на Employee. Он добавляет свойство reports (значение по умолчанию - пустой массив, предназначенный для хранения массива Employee-объектов как значений).

  • WorkerBee также основан на Employee. Он добавляет свойство projects (значение по умолчанию - пустой массив, предназначенный для хранения массива строк как значений).

  • SalesPerson базируется на WorkerBee. Он добавляет свойство quota (значение по умолчанию - 100). Также переопределяет свойство dept значением "sales", указывая, что все менеджеры по продажам/salespersons находятся в этом отделе.

  • Engineer базируется на WorkerBee. Он добавляет свойство machine (значение по умолчанию - пустая строка), а также переопределяет свойство dept property значением "engineering".