Само собой разумеется, этот метод относительно легко понять, называя конструктор родительского класса в подклассе. Кроме того, одним из самых больших преимуществ этого метода является то, что построение наследования может достичь множественного наследования. Просмотрите этот код:
Кода -копия выглядит следующим образом:
функция a ()
{}
Функция b ()
{}
Функция c ()
{
this.father = a;
this.father ();
Удалить это. Отец;
this.father = b;
this.father ();
Удалить это. Отец;
}
Но этот метод также имеет это и это недостаток:
Если вы знакомы с объектно-ориентированным, давайте посмотрим на этот код C#:
Кода -копия выглядит следующим образом:
классная программа
{
staticvoid main (string [] args)
{
B b = newb ();
bool temp = (typeof (a)). Isinstanceoftype (b);
Console.WriteLine (TEMP);
}
}
класс
{
public a ()
{
}
}
Классб: а
{
Public B ()
{
}
}
Какой результат? b, конечно, является примером:
Тем не менее, мы делаем этот тест в вышеуказанном разделе кода JavaScript, унаследованной с использованием конструкций:
Кода -копия выглядит следующим образом:
функция a ()
{}
Функция b ()
{}
Функция c ()
{
this.father = a;
this.father ();
Удалить это. Отец;
this.father = b;
this.father ();
Удалить это. Отец;
}
var c = new c ();
оповещение (C ExtanceOf A);
Но результаты не то, что мы представляли:
На самом деле, это легко объяснить: построенное наследование - это просто свойство родительского класса, скопированного путем вызова метода строительства родительского класса. Никаких других поисков не выполнены, поэтому многие материалы не называют этот метод наследования наследования.
Видя недостатки, помните о преимуществах: поддержите больше наследства.
Когда мы смотрим на наследство C#, мы обнаружили, что есть два наиболее типичных отличия от этого наследования: C# не поддерживает множественное наследство и недостатки конструктивного наследства, которые я упоминал выше. Таким образом, был создан новый метод наследования, и мы стали прототипом наследования.
Когда вы видите название, вы можете приблизительно понять, что прототип наследование состоит в том, чтобы использовать характеристики прототипов для достижения наследования. Это самый популярный способ наследования в JavaScript. Если вы не понимаете прототип, пожалуйста, обратите внимание на другую мою статью: «Играя с прототипом - прототип».
Давайте сначала посмотрим на код. Здесь я нарисую кусок кода из «Возвращение короля JavaScript»:
Кода -копия выглядит следующим образом:
точка функции (размерный)
{
this.dimensional = dimensional;
this.test = function () {
оповещение («успех»);
}
}
Функциональная точка2D (x, y)
{
this.x = x;
this.y = y;
}
Point2d.prototype = new Point (2);
var p = new Point2d (3,4);
p.test ();
Тест прошел. Это показывает, что Point2D унаследовал метод родительского класса, а затем посмотрите на экземпляр.
оповещение (p -экземпляра);
успех! Хорошо, давайте проанализируем прототип наследование:
Я не буду говорить о преимуществах наследования прототипа. Структура проста, легко понять, и она может быть инстинктивной. Но его недостатки также важны. Вы помните мой предыдущий пример о животных, людях и девушке? Мы используем прототип наследования для реализации следующего:
Кода -копия выглядит следующим образом:
Функциональное животное ()
{
this.run = function () {alert ("Я могу запустить");};
}
Функция людей (имя)
{
this.say = function () {alert ("Мое имя"+this.name);}
}
People.prototype = new Animal ();
Функция девушка (имя, возраст)
{
this.age = возраст;
this.introduce = function () {alert ("Мое имя"+this.name+". I Am Am"+this.age);};
}
Girl.Prototype = новые люди (???);
Пожалуйста, обратите внимание на строку кода в моей красной жирной части. Люди - прототип девушки. Поэтому, когда мы инициализируем людей, мы должны передать параметр имени, но имя каждой девушки отличается, поэтому не существует использования прототипа наследования: на этапе наследования прототипа вы не можете определить, какие параметры использовать для инициализации объекта родительского класса. Случай 2: Это очень просто. Каждый класс может иметь только один прототип, так что то есть прототип наследование не может быть использовано для множественного наследования. Это хорошая вещь и плохая вещь. потому что:
На объектно-ориентированных языках, таких как Java и C#, множественное наследование не поддерживается, и множественное наследство считается несовместимым с объектно-ориентированным
Несколько интерфейсов не могут быть реализованы!
Хорошо, это все, о чем я написал сегодня. Подводя итог, прототип наследование решает некоторые проблемы наследования конструкции и вводит некоторые новые проблемы. В целом, прототип наследование является наиболее широко используемым методом наследования, а также это способ по -настоящему реализовать наследование в грамматике JavaScript!