Прежде чем что -то делать, вы должны сначала прояснить преимущества этого. Я считаю, что никто не хочет делать что -то без причины. Вообще говоря, когда мы разрабатываем занятия, мы действительно надеемся уменьшить дублирование кода. Использование наследования может сделать это идеально. С помощью механизма наследования вы можете спроектировать снова на основе существующих классов и в полной мере использовать различные методы, которые они уже имеют, и легче изменять дизайн. Я не скажу много чепухи, приведите пример:
Кода -копия выглядит следующим образом:
Функция человека (имя) {
this.name = name;
}
Person.prototype.getName = function () {
вернуть это. name;
}
Функция блогер (имя, блог) {
Person.call (это, имя);
this.blog = блог;
}
var bloger = new Bloger ("Zhen", "// www.vevb.com");
Alert (bloger.name == "Zhenn"); /*Вернитесь в Ture*/
Alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "Zhenn"); /*Tip "bloger.getName не функция"*/
Из приведенного выше примера мы видим, что блогер динамически называет нативные свойства и методы своего родительского класса человека через звонок внутри него (для объяснения вызова, пожалуйста, см. //Www.vevb.com/article/62086.htm), который можно понять, когда блогер унаследовал человека и становится подложением. Тем не менее, осторожные студенты обнаружат, что методы в объекте прототипа человека не могут быть унаследованы, полагаясь исключительно на вызов, поэтому он предлагает «Bloger.getName не является функцией». Но не волнуйтесь, просто разбирайтесь с приведенным выше кодом, чтобы решить эту проблему!
Кода -копия выглядит следующим образом:
Функция человека (имя) {
this.name = name;
}
Person.prototype.getName = function () {
вернуть это. name;
}
Функция блогер (имя, блог) {
Person.call (это, имя);
this.blog = блог;
}
/*Обратите внимание на следующие две строки кода*/
Bloger.prototype = new Person ();
Bloger.prototype.constructor = bloger;
var bloger = new Bloger ("Zhen", "// www.vevb.com");
Alert (bloger.name == "Zhenn"); /*Вернитесь в Ture*/
Alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "Zhenn"); /* Приглашение true*/
Здесь нам нужно объяснить эти две строки кода. Мы знаем, что каждый конструктор имеет атрибут прототипа, который указывает на объект прототипа конструктора. Фактически, объект прототипа также является объектом экземпляра, но атрибуты и методы, определенные в объекте прототипа, могут быть предоставлены всем объектам экземпляра для обмена. Исходя из этого, мы видим, что намерение добавить две строки кода состоит в том, чтобы установить объект прототипа подкласса, чтобы указывать на созданный объект родительского класса, а созданный объект родительского класса наследует все методы атрибута прототипа родительского класса, что достигает нашей цели. Прототип подкласса наследует свойства и методы всех объектов экземпляра родительского класса.
Тем не менее, вы также должны отметить, что bloger.prototype.constructor = bloger; Эта строка кода, потому что, когда прототип подкласса устанавливается на экземпляр родительского класса, его атрибут конструктора будет указывать на родительский класс, поэтому конструктор прототипа подкласса должен быть установлен, чтобы снова указывать на подкласс. На данный момент, наследство класса JavaScript было прекрасно реализовано!
Чтобы упростить объявление подклассов, весь процесс расширения подклассов может быть записан в функции, называемой Extend, которая предназначена для создания нового класса на основе данной структуры класса:
Кода -копия выглядит следующим образом:
Функция Extend (ChildClass, ParentClass) {
var f = new Function ();
F.prototype = parentclass.prototype;
childclass.prototype = new f ();
childclass.prototype.constructor = childclass;
}
С помощью этой функции вы можете легко расширить подкласс. Просто назовите эту функцию. Две строки кода, добавленные выше, могут быть изменены на расширение (блогер, человек), что также может достичь полного наследования!