Заимствовать конструктор наследование
При решении проблемы включения значений типа эталонного типа в прототип разработчики начали использовать методику, называемую кража конструктора заимствования (иногда вызываемые поддельные объекты или классическое наследование). Основная идея этой техники довольно проста, а именно, называть супертип конструктор внутри подтипа конструктора.
Базовый режим
function supertype () {this.colors = ["red", "blue", "green"];} function subtype () {// Унаследованный супертип supertype.call (this);} var ancome1 = new subtype (); exance1.colors.push ("black"); alert (ancoble1.colors); // "Красный, синий, зеленый, черный" ancement2 = new subtype (); alert (exaction2.colors); // "Красный, синий, зеленый"Основные идеи
Основная идея заимствования конструкторов заключается в использовании вызова или применения для копирования (заимствования) свойств и методов, указанных в родительском классе в экземпляр, созданный подклассом. Потому что этот объект связан со временем выполнения на основе среды выполнения функции. То есть в глобальном масштабе, это равно окну, и когда функция называется как метод объекта, это равно этому объекту. Методы вызова и применения могут использоваться для вызова метода вместо другого объекта. Методы вызова и применения могут изменить контекст объекта функции из начального контекста на новый объект, указанный ThisOBJ.
Следовательно, этот конструктор заимствования является, когда называется новый объект (обратите внимание, что новый оператор отличается от прямого вызова. Когда функция вызывается, это указывает на окно. Когда создается новый, это указывает на созданный экземпляр), создается новый объект экземпляра и выполняется код в подтипе. Вызов в подтипе вызывает Supertyep, что означает, что это указание изменяется на указание на новый экземпляр, поэтому эти связанные атрибуты и методы в SuperType будут назначены новым экземплярам, а не назначают Suptype. Во всех случаях эти свойства и методы этого определены родительским классом.
Преимущества
По сравнению с прототипами цепочек, конструкторы заимствования имеют большое преимущество, то есть они могут передавать параметры в супертип конструкторов в конструкторах подтипа. Поскольку атрибут связан с этим, он присваивается соответствующему экземпляру при вызове, а значения каждого экземпляра не будут влиять друг на друга.
Например:
Функция Supertype (name) {this.name = name;} function subtype () {// наследует супертип, а также передает параметр supertype.call (this, "nicholas"); // атрибут экземпляра this.age = 29;} var instance = new subtype (); Alert (exatcher.name); //"Nicholas"; alert(instance.age); // 29Недостатки
Если вы просто заимствуете конструктор, то проблемы с шаблоном конструктора не будут избежать - все методы определены в конструкторе, поэтому нет способа говорить о повторном использовании функций. Кроме того, методы, определенные в прототипах супертипа, также невидимы для подтипов, и в результате все типы могут использовать только шаблоны конструктора. Учитывая эти проблемы, техника заимствования конструкторов также редко используется отдельно.
Комбинация наследования
Комбинация наследования, иногда называемого псевдоклассическим наследством. Это модель наследования, которая объединяет прототипную цепь и заимствованную технологию конструктора в одну часть, чтобы воспроизводить сильные стороны обоих.
Основные идеи
Идея состоит в том, чтобы использовать цепочку прототипов для реализации наследования свойств и методов прототипа, а также для реализации наследования свойств экземпляра путем заимствования конструкторов. Таким образом, функциональное мультиплексирование достигается путем определения методов на прототипе, а также может гарантировать, что каждый экземпляр имеет свои собственные атрибуты.
Базовая модель
Функция Supertype (name) {this.name = name; this.colors = ["red", "blue", "green"];} supertype.prototype.sayname = function () {alert (this.name);}; function subtype (name, age) {// hangitance attribute supertype.call (this, name); this.age = age;} // метод наследования subtype.prototype = new supertype (); subtype.prototype.constructor = subtype; subtype.prototype.sayage = function () {alert (this.age);}; var ancome1 = new subtype ("nicholas" 29); instance1.colors.push ("black"); alert (instance1.colors); // "красный, синий, зеленый, черный" exancement1.sayname (); // "nicholas"; instance1.sayage (); // 29var ancess2 = новый подтип ("greg", 27); alert (exaction2.colors); // "красный, синий, зеленый" экземпляр2.sayname (); // "greg"; exants22.sayage (); // 27Преимущества
Комбинированное наследование позволяет избежать дефектов прототиповых цепей и заимствованных конструкторов, объединяет их преимущества и становится наиболее часто используемой шаблоном наследования в JavaScript.
Недостатки
Самая большая проблема с комбинированным наследством состоит в том, что в любом случае конструктор супертипа будет вызоваться дважды: один раз при создании прототипа подтипа, а другое время внутри подтипа конструктора. В то время как подтипы в конечном итоге будут содержать все свойства экземпляра объекта SuperType, мы должны переопределить эти свойства при вызове конструктора подтипа.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.