Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)internet, it, интернет, интернет сеть, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительномобильные, электроника, видеокарта, СКС, AXIS, аутсорсинг, интернет, сеть, радионяни, гаджеты |
ООП в JavaScript
Создаем подклассДопустим, нам понадобился объект, похожий на Person, но с дополнительной информацией о человек, как о служащем. Давайте определим подкласс для Person: KevLinDev.extend = function(subClass, baseClass) {
function inheritance() {}
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
function Employee(first, last, id) {
// здесь инициализируем свойства
}
KevLinDev.extend(Employee, Person);
Сначала мы создаем удобную функцию для задания нашей цепочки наследования.
Нам необходимо сделать свойство Мы начали с определения вспомогательной функции по имени "inheritance". Затем
мы устанавливаем ее прототип в прототип baseClass'а. Экземпляр
"inheritance", полученный с помощью "new", будет иметь скрытый прототип,
ссылающийся на общедоступный прототип базового класса. Мы создаем новый
экземпляр "inheritance" и присваиваем его прототипу subClass'а. Теперь,
каждый раз, когда мы будем создавать новый экземпляр subClass'а,
скрытый прототип этого экземпляра будет ссылаться на экземпляр "inheritance". А
скрытый прототип "inheritance" будет ссылаться на общедоступный прототип
базового класса. Значит, изменения В JavaScript, когда вы создаете новый объект, его локальное свойство
"constructor" определяется как указатель на функцию (конструктор), которая была
вызвана для создания данного экземпляра. Я часто пользуюсь этим и сравниваю
свойство "constructor" объекта с нужной функцией для определения "типа" данного
объекта. В результате вызова " Последние две строки в коде функции "extend" используются как удобные соглашения для вызова конструктора и методов предка. Это будет продемонстрировано в следующем разделе. Вызываем конструктор базового классаМы создали наш новый подкласс и теперь хотим чтобы при вызове "new" инициализировались его свойства. При этом желательно было бы не повторять в нашем подклассе Employee код базового класса Person. Нам нужно сделать так, чтобы параметры "first" и "last" обрабатывались конструктором Person, а параметр "id" - конструктором Employee. Следующий код показывает, как этого добиться: function Employee(first, last, id) {
Employee.baseConstructor.call(this, first, last);
this.id = id;
}
Конечно, это выглядит несколько громоздко, но мы просто вызываем суперконструктор с помощью "call". Конструктор базового класса будет вызван так, как будто он является методом первого параметра функции "call", т.е. "this". Остальные параметры будут переданы в вызываемую функцию. Итак, в нашем случае конструктор базового класса Person обработает "first" и "last", а конструктор Employee обработает "id". Читайте далее: Кевин Линдсей (Kevin Lindsey), 2006 Перевод Д. Скоробогатова (20.10.2009). Последнее редактирование: 2010-01-05 15:43:41 Метки материала: ООП, JS, производный класс, конструктор, экземпляр класса, указатель, указатели, передача по ссылке, определение функции, инкапсуляция, базовые классы, алгоритм, this, new, явная инициализация, constructor, метод, class, функция, члены класса, script Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.