Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)internet, it, интернет, интернет сеть, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительномобильные, электроника, видеокарта, СКС, AXIS, аутсорсинг, интернет, сеть, радионяни, гаджеты |
ООП в JavaScript
Еще один подклассМожно подумать, что эта простая техника ООП в JS поддерживает только один уровень наследования и не сможет правильно работать с двумя или большим числом уровней наследования. Чтобы убедиться в правильности нашей логики, давайте создадим еще один подкласс. Наш следующий подкласс, - Manager (начальник), - будет расширять Employee и содержать дополнительное свойство "department" ("отдел"). Ниже определяется этот новый подкласс: function Manager(first, last, id, department) {
Manager.baseConstructor.call(this, first, last, id);
this.department = department;
}
KevLinDev.extend(Manager, Employee);
Здесь нет ничего нового. Этот код выглядит практически идентично определению Employee и приведенный ниже пробный код показывает, что наше наследование работает, как ожидалось. КодВы можете скачать файл с методом "extend" и и простым тестом здесь: inheritance.zip. Результаты этого теста можете увидеть здесь: example.htm (очень простой). Кроме того я включил примерный код JS в эту статью. Этот код в дополнение к прочему показывает реализацию перегрузки базовых методов в подклассе (обратите внимание на методы toString). /**
* наследование
*
* @author Kevin Lindsey
* @version 1.0
*
* copyright 2006, Kevin Lindsey
*
*/
// плейсхолдер пространства имен
KevLinDev = {};
/**
* Функция используется для расширения одного класса другим
*
* @param {Object} subClass
* класс-наследник, или подкласс
* @param {Object} baseClass
* класс, от которого наследуется
*/
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;
}
/*
* Класс Person (человек)
*/
/**
* Конструктор класса Person
*
* @param {String} first
* Имя человека
* @param {String} last
* Второе имя (отчество) человека
*/
function Person(first, last) {
this.first = first;
this.last = last;
}
/**
* Создает строку, представляющую этот объект
*
* @return {String} Строка, представляющая объект
*/
Person.prototype.toString = function() {
return this.first + " " + this.last;
};
/*
* Класс Employee (служащий)
*/
/**
* Конструктор класса Employee
*
* @param {String} first
* Имя служащего
* @param {String} last
* Отчество (второе имя) служащего
* @param {Number} id
* Номер служащего
*/
function Employee(first, last, id) {
Employee.baseConstructor.call(this, first, last);
this.id = id;
}
// подкласс Person
KevLinDev.extend(Employee, Person);
/**
* Создает строку, представляющую этот объект
*
* @return {String} Строка, представляющая объект
*/
Employee.prototype.toString = function() {
return Employee.superClass.toString.call(this) + ": " + this.id;
};
/*
* Manager (начальник)
*/
/**
* Конструктор класса Manager
*
* @param {String} first
* Имя начальника
* @param {String} last
* Отчество начальника
* @param {Number} id
* Служебный номер начальник
* @param {String} department
* Отдел этого начальника
*/
function Manager(first, last, id, department) {
Manager.baseConstructor.call(this, first, last, id);
this.department = department;
}
// подкласс Employee
KevLinDev.extend(Manager, Employee);
/**
* Создает строку, представляющую этот объект
*
* @return {String} Строка, представляющая объект
*/
Manager.prototype.toString = function() {
return Manager.superClass.toString.call(this) + ": " + this.department;
};
Кевин Линдсей (Kevin Lindsey), 2006 Перевод Д. Скоробогатова (20.10.2009). P.S. от редакции: чтобы было удобнее разбираться в этом примерном коде, можно скопировать его в любимый редактор с подсветкой кода JavaScript. Рекоммендуем, например, бесплатный и открытый Редактор кода - SciTE. Последнее редактирование: 2009-12-24 13:09:02 Метки материала: ООП, JS, файлы, файл, экземпляр класса, программа, исходные файлы, базовые классы, алгоритм, this, string, скачать, производный класс, методы, метод, конструктор, компьютерные ноу-хау, исходники, информационные технологии, new, constructor, классы, ИТ, IT Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.