В JavaScript мы можем использовать прототипы для достижения наследования.
Например
function baz () {this.oo = "";} function foo () {} foo.prototype = new Baz (); var myfoo = new foo (); myfoo.oo;Таким образом, мы можем получить доступ к атрибуту OO на Baz. Это невозможно в фактическом использовании из -за характеристик обмена прототипом (данные сохраняются в куче),
Все экземпляры используют прототип, но после того, как атрибут BAZ имеет ссылочный тип, он будет трагичным. Если один экземпляр изменен, другой экземпляр также изменится ... Wuwuwu
Естественно будет комбинация наследования
function baz () {this.oo = "";} baz.prototype.xx = function () {} function foo () {baz.call (this); // второй вызов} foo.prototype = new Baz (); // первый вызов var myfoo = new foo ();Это будет иметь проблему, и код также показывает, что BAZ будет вызоваться дважды. Как это может это позволить?
Если вы добавите предложение, должен ли второй метод не должен иметь проблему с первым методом? Ответ нет.
Причина в том, что поиск атрибутов начинается с самого объекта. Только когда это не найдено, будет ли он найден, он будет найден в прототипе. При вызове атрибуты унаследованы.
Позвольте мне добавить еще одно предложение, тогда этого не будет достаточно, чтобы просто использовать наследство вызовов, как это? Это возможно, если вы не используете прототип, но как вы не можете использовать прототип в качестве Девы?
Метод используется на прототипе, поэтому производительность будет намного лучше.
Паразитарная комбинация наследования
__extends = function (p, c) {function ctor () {this.constructor = c; // конструктор назначения} ctor.prototype = p.prototype; c.prototype = new ctor ();} функция Baz () {this.oo = [1];} baz.prototype.xx = function () {} ____ {ooo = astends (astonds); foo () {baz.call (this);} var myfoo = new foo (); myfoo.oo; myfoo.xx;Это не только решает проблему двух вызовов, но также решает проблему, что когда объект вызывает конструктор, реальная функция, которая создает объект, называется вместо других конструкторов в цепочке прототипа.
В коде есть заявление.
Конструктор является атрибутом на объекте прототипа и является создателем объекта. Поскольку наши атрибуты прототипа переназначены, конструктор наследуется.
Здесь я хочу поговорить о том, как создаются объекты, то есть то, что сделал новый.
Например:
var a = new b ();
На самом деле, это так, a = {}; Создает для A, а затем B.Call (A); вызовать инициализируется. Перед вызовом есть еще один шаг, который является внутренним объектом прототипа A.
Прототип объект, на который свойство прототипа устанавливается на точки B. На прототипе есть атрибут конструктора, который используется для создания элементов управления памятью объекта.
Вероятно, все ... еще поздно, давайте разберем это. Сохраняйте спокойствие и не будьте нетерпеливы. Завтра усердно работать, и надеюсь, что все постепенно поправится.
Вышеуказанное-все контент, который редактор приносит вам о полном понимании наследования (обязательного прочтения) в JavaScript. Я надеюсь, что все будут поддерживать дом по стопам.