Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

ООП в 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.

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2009-12-24 13:09:02

Метки материала: ООП, JS, файлы, файл, экземпляр класса, программа, исходные файлы, базовые классы, алгоритм, this, string, скачать, производный класс, методы, метод, конструктор, компьютерные ноу-хау, исходники, информационные технологии, new, constructor, классы, ИТ, IT

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.