Клиентский JavaScript 1.3 Руководство



Рисунок 8.6 Специфицирование свойств в конструкторе, этап 2


Рисунок 8.6   Специфицирование свойств в конструкторе, этап 2

Рассмотрим одно из этих определений детально. Вот новое определение для конструктора Engineer:

function Engineer (name, projs, mach) {
this.base = WorkerBee;
this.base(name, "engineering", projs);
this.machine = mach || "";
}

Предположим, Вы создаёте новый Engineer-объект:

jane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau");

JavaScript выполняет следующее:

  1. Операция new создаёт общий объект и присваивает его свойство __proto__ Engineer.prototype.

  2. Операция new передаёт этот новый объект Engineer-конструктору как значение ключевого слова this.

  3. Конструктор создаёт новое свойство base для этого объекта и присваивает значение конструктора WorkerBee свойству base. Это делает конструктор WorkerBee методом Engineer-объекта.

  4. Имя свойства base не является специальным. Вы может использовать любое верное имя свойства; base просто подходит по смыслу.

    Конструктор вызывает метод base, передавая ему в качестве аргументов два аргумента из переданных конструктору ("Doe, Jane" и ["navigator", "javascript"]), а также строку "engineering". Явное использование "engineering" в конструкторе указывает, что все Engineer-объекты имеют одно значение для наследуемого свойства dept, и что это значение переопределяет значение, наследуемое из Employee.

  5. Поскольку base это метод из Engineer, внутри вызова base JavaScript связывает ключевое слово this с объектом, созданным на Этапе 1. Таким образом, функция WorkerBee в свою очередь передаёт аргументы "Doe, Jane" и ["navigator", "javascript"] в функцию-конструктор Employee. После возвращения из функции-конструктора Employee, функция WorkerBee использует оставшийся аргумент для установки свойства projects.

  6. После возвращения из метода base, конструктор Engineer инициализирует свойство machine объекта значением "belau".




  7. Содержание  Назад  Вперед