Прежде чем говорить о прототипах цепей, мы должны сначала понять, какие отношения между индивидуальными функциями и функциями, и каковы неразрывные отношения между конструкторами, прототипами и экземплярами? На самом деле, все функции являются экземплярами функции. На конструкторе есть прототип свойства прототипа, который также является объектом; Тогда на объекте прототипа есть свойство конструктора, которое указывает на конструктор; И на объекте экземпляра есть свойство _proto_, которое также указывает на объект прототипа, и это свойство не является стандартным свойством и не может использоваться при программировании. Это свойство используется внутренне для использования браузера.
// _proto_ В функции есть прототип свойств. Объект, созданный этой функцией, будет подключен к свойству по умолчанию. // Связь между прототипом и _proto___ с точки зрения объекта, прототип с точки зрения конструктора.
Ниже давайте посмотрим на картинку и поговорим.
1. Связь между конструктором, прототипом и экземпляром
①+объект
②+Функция+объект+массив
Понимая их, давайте обсудим, что такое прототипная цепочка. По словам, это на самом деле конечная цепь, образованная между конечным объектом экземпляра и прототипом, который используется для реализации общих атрибутов и наследства. Затем давайте посмотрим на код, чтобы говорить.
var obj = new Object (); Объект представляет собой прототип объекта с объектом прототипа и объектом прототипа OBJ._Proto _._ Proto _._ Proto _._ Proto__proto_ также имеет объект прототипа. Прототип объекта объекта продолжает смотреть вверх, и вы найдете пример NULL // Prototype Chain Chain ar arr = []; arr -> array.prototype -> object.prototype -> null var o = new Object (); o -> object.prototype -> null; function foo1 () {this.name1 = '1';} function foo2 () {this.name2 = '2';} foo2.prototype = new foo1 (); function foo3 () {this.name = '3';} foo3.prototype = new foo2 (); var foo3 = new foo3 ();Следующая проблема наследства.
2. Наследство
1) Прототип наследования
Функция животного (имя) {this.name = name; } function tiger (color) {this.color = color; } // var tiger = new Tiger ('желтый'); // console.log (tiger.color); // console.log (tiger.name); // не определен // tiger.prototype = new Animal ('Tiger'); // One Way object.prototype.name = 'Big Tiger'; // второй путь var tiger = new Tiger ('желтый'); console.log (tiger.color); console.log (tiger.name);Стоит отметить, что здесь есть две основные проблемы: ① Не удобно передать параметры родительскому типу; ② Типы ссылок в родительском типе разделяются во всех случаях
2) ES5 предоставляет метод Object.Create () для реализации наследования
― - Совместимый // shim shim function create (obj) {if (object.create) {return object.create (obj); } else {function foo () {} foo.prototype = obj; вернуть новый foo (); }}Этот метод является новой особенностью ES5, которая фактически копирует и наследует.
3) Копировать наследование
var obj = {}; obj.extend = function (obj) {for (var k in obj) {this [k] = obj [k]; }}4) Заимствование конструктора наследования - члены по прототипу в заимствованном конструкторе не заимствованы
Функция животного (имя) {this.name = name;} function mouse (никнам) {Animal.call (this, 'mouse'); this.nickname = chicname;} var m = new Mouse ('jerry'); console.log (m.name); console.log (m.nickname);Существующая проблема: она может решить проблему передачи параметров в прототипе наследование, но члены (атрибуты и методы) на объекте прототипа в родительском типе не могут быть унаследованы, чтобы
5) Объект комбинированного наследства-прототипа является динамическим
Функция Person (name) {this.name = name;} person.prototype.showname = function () {console.log (this.name);} function Student (имя, возраст) {person.call (this, name); this.age = age;} student.prototype = new Person (); Student.prototype.contructor = Student[Прототип наследование + заимствование конструктора наследования] его характеристика заключается в том, что одна копия атрибутов на экземпляр и метод используется
[Сводка] Чтобы выразить это в очень грубом предложении, так называемая прототипная цепь-это способ поведения нахождения матери, и можно понять, что люди рождаются людьми, а демоны рождаются демонами. На самом деле существует только одно ядро в цепочке прототипов: обмен атрибутами и независимый контроль. Когда ваш экземпляр объекта нуждается в независимых атрибутах, суть всех практик состоит в том, чтобы создавать атрибуты в экземпляре объекта. Если вы не думаете слишком много, вы можете напрямую определить независимые атрибуты, которые вам нужны лично, чтобы перезаписать свойства прототипа. Короче говоря, при использовании прототипа наследования вы должны уделять особое внимание атрибутам в прототипе, потому что это все существования, которые влияют на все тело. Наиболее распространенным методом сейчас является комбинированный режим.
1. Прототип цепочка
1) Взаимосвязь между конструктором, прототипом и экземпляром
① Конструктор имеет прототип свойств, который является объектом (экземпляр объекта). ② Прототип объект имеет атрибут конструктора, который указывает на функцию конструктора, к которой принадлежит объект прототипа. ③ Объект экземпляра имеет атрибут _proto_, который также указывает на объект прототипа конструктора. Это нестандартное свойство и не может использоваться для программирования. Он используется самим браузером. 2) Взаимосвязь между прототипом и _proto_
①prototype является свойством конструктора
②_proto_ - атрибут объекта экземпляра
- Оба указывают на один и тот же объект
[Сводка] i) функции также являются объектами, а объекты не обязательно являются функциями;
ii) сущность объекта: неупорядоченный набор пар клавишных значений; Значения в парах ключевых значений могут быть значениями любого типа данных
iii) Объект - это контейнер, а контейнер содержит (свойства и методы)
3) Поиск атрибутов
① При доступе к члену объекта вы сначала найдете, существует ли он в объекте.
② Если нет текущего объекта, ищите его в объекте прототипа конструктора
③ Если объект прототипа не найден, ищите прототип объекта прототипа
④ Знайте, что прототип объекта объекта прототипа является нулевым
2. Функция
- Все функции - это экземпляры функции
① Локальный объект: объект независимо от среды хоста (браузер) - включая объект, массив, дату, regexp, функция, ошибка, номер, строка, логический
② Встроенные объекты, включая математику и глобальные (окно, которое является глобальной переменной в JS), и при его использовании не требуется новое.
③ Host объект, включая пользовательские объекты, Dom, bom
Выше приведено полное описание того, как понять цепочку прототипа JS, представленную вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!