Прежде чем начать код, вы должны четко понять, в чем цель наследования и какие преимущества могут принести. Вообще говоря, при разработке класса мы надеемся уменьшить дублированный код и ослабить связь между классами. Трудно позаботиться об обоих. В соответствии с нашим пониманием наследования языка лица -объекта, наследование принесет прямую сильную связь, но из -за его уникальной гибкости JS может разработать сильную связь и слабый код связи, высокую эффективность и неэффективную код. И то, что вы используете, зависит от ситуации.
Следующее предоставляет три метода наследования в JS: наследование класса, прототип наследование и смешивание. Вот краткое описание наследства класса.
Класс Форма наследование.
Реализация наследования типа JS зависит от цепочки прототипа. Какая оригинальная цепочка? Объект в JS имеет прототию атрибута.
Кажется, что у него есть впечатление о прототипе.
Код кода копирования следующим образом:
var person = function () {
this.name = "liyatang";
};
Person.prototype = {
// вы можете предоставить здесь основную функцию человека здесь
getName: function () {
Вернуть это. Name;
}
}
Мы поместили основную функцию класса в свойство прототипа, указывая на то, что эталон объекта личности имеет функцию xxx.
После понимания прототипа вам нужно понять, что такое оригинальная цепочка. Когда член (атрибут или метод) объекта посещения, если член не будет замечен в текущем объекте, то JS найдет его в объекте, упомянутом в атрибуте прототипа. Если не найдено, он вернется в Undifined.
Итак, какие подсказки дают нам оригинальная цепь? Легко думать, что основная цепь означает, что один класс унаследовал другой класс. Это связывает членов родительского класса с подкладом, потому что они найдут родительский класс, когда они не найдены на подклассе. (Вышеупомянутые два параграфа слов не являются строгими, описаны только в легких словах)
Ниже нам нужен китайский класс, и нам нужно унаследовать имена и GetName членов класса человека.
Код кода копирования следующим образом:
Var китайский = function (name, nation) {
// Наследование, вам нужно вызвать конструктор родительского класса, вы можете позвонить в Call, этот пункт на китайский
// человек может вызвать человека членами по этому объему
Person.call (это, имя);
this.nation = national;
};
Китайский.
// это не то же самое, что и раньше, потому что атрибут прототипа покрывается
//Chinese.prototype = {
// getNation: function () {{{
// вернуть это.nation;
//}
//};
// путь в будущем должен быть добавлен таким образом
Китайский.prototype.getnation = function () {
Вернуть это.
};
Отношения наследования устанавливаются, мы называем это так
Код кода копирования следующим образом:
var c = новый китайский ("liyatang", "Китай");
Alert (c.getName ());
Таким образом, наследование типа завершено. Действительно ли это сделано?
Это связано с тем, что приведенный выше код китайский. Это не терпит само по себе, и это не тот эффект, который мы хотим.
Мы можем ослабить связь в другом объекте или экземпляре.
Код кода копирования следующим образом:
//
//Chinese.prototype = new Person ();
// второй тип
// var f = function () {};
//F.prototype = person.prototype;
//Chinese.prototype = f.prototype;
Каковы различия между этими двумя методами? Добавить пустую функцию F во второй тип, которая может избежать экземпляра создания родительского класса, поскольку родительский класс может быть большим, а функция структуры родительской класс будет иметь некоторые побочные эффекты или большое количество расчетов будет выполнено. Так что рекомендуйте второй метод.
На данный момент все кончено, пока не! Существуют атрибуты атрибутов атрибутов объекта, которые сохраняют ссылку на функцию конкретного экземпляра объекта. Согласно этому утверждению, chiese.prototype.constructor должен быть равен китайцам, что на самом деле нет.
Когда цепочка прототипа хизе была установлена перед воспоминаниями, мы рассмотрели человека. Так что в это время chiese.prototype.constructor - это человек. Нам также нужно добавить следующий код
Код кода копирования следующим образом:
// здесь нет необходимости исследовать условия, зная китайский.
If (winking.prototype.constructor == object.prototype.constructor) {
Китайский.prototype.constructor = китайский;
}
Превратиться во весь код следующим образом
Код кода копирования следующим образом:
var person = function (имя) {
this.name = name;
};
Person.prototype = {
getName: function () {
Вернуть это. Name;
}
};
Var китайский = function (name, nation) {
Person.call (это, имя);
this.nation = national;
};
var f = function () {};
F.prototype = person.prototype;
Китайский.prototype = f.prototype;
If (winking.prototype.constructor == object.prototype.constructor) {
Китайский.prototype.constructor = китайский;
}
Китайский.prototype.getnation = function () {
Вернуть это.
};
var c = новый китайский ("liyatang", "Китай");
Alert (c.getName ());
Если вы можете поместить код наследования в функцию, это удобно для повторного использования кода, а последняя сортировка кода следующим образом
Код кода копирования следующим образом:
Функция extend (subclass, superclass) {{
var f = function () {};
F.prototype = superclass.prototype;
subclass.prototype = new f ();
subclass.prototype.constructor = subclass;
subclass.superclass = superclass.prototype;
If (superclass.prototype.constructor == object.prototype.constructor) {
superclass.prototype.constructor = superclass;
}
}
var person = function (имя) {
this.name = name;
};
Person.prototype = {
getName: function () {
Вернуть это. Name;
}
};
Var китайский = function (name, nation) {
Person.call (это, имя);
this.nation = national;
};
расширить (китайский, человек);
Китайский.prototype.getnation = function () {
Вернуть это.
};
var c = новый китайский ("liyatang", "Китай");
Alert (c.getName ());
Модификация после публикации:
Под комментариями на первом этаже у меня есть новый взгляд на эту функцию. Два метода были предложены при обсуждении, как установить исходную цепь
Код кода копирования следующим образом:
//
//Chinese.prototype = new Person ();
// второй тип
// var f = function () {};
//F.prototype = person.prototype;
//Chinese.prototype = f.prototype;
Хотя второй способ уменьшить функцию строительства родительского класса, человек. Кальм (это, имя) используется при разработке класса Китая;
Однако в первом методе вы можете уменьшить человека. (Это, имя) на китайском языке; Может пожелать поместить этот код функции в расширение. Просто напишите
Китайский. Прототип = новый человек ();
Но забывчивость в том, что китайский. Прототип = новый человек (); Ответ неправильный! Очевидно, что новый человек () должен передать параметр имени. Мы не можем сделать эту часть функции Extend, поэтому мы должны назвать родительский конструктор в китайском классе. Это также соответствует идеям объекта.
Поэтому все еще рекомендуется использовать второй метод.
В первый раз, когда я писал о технических статьях таким образом, в основном они вымощены в соответствии с моим собственным мышлением.