Чтобы выяснить цепочку прототипа, вы должны сначала выяснить тип функции. Класс имеет очень важную функцию, которая заключается в том, что он может создавать с ним объекты как шаблон, основанный на его конструкторе. В JavaScript функция имеет 2 функции
Во -первых, в качестве общего вызова функции
Во -вторых, конструктор его объекта прототипа является новым ()
Давайте приведем пример
Кода -копия выглядит следующим образом:
функция a () {
this.name = 'a';
}
Что происходит, когда создается функция?
Во -первых, он создаст функциональный объект, то есть сам
Во -вторых, он создаст прототип объекта @a (обозначается @)
В -третьих, функциональный объект будет иметь указатель прототипа, который указывает на соответствующий объект прототипа, и здесь он указывает на @a
В -четвертых, в объекте @A есть указатель конструктора, указывающий на его конструктор, здесь он указывает на
http://img.blog.csdn.net/20140222125611500?watermark/2/ahr0cdovl2jsb2cuy3nkbi5uzxqvbgpsmtu3mdex/font/5a6l5l2t/fontsize/400/fil l /0 -й /Юго -восток
Какое использование этого атрибута прототипа?
Фактически, атрибут прототипа представляет собой диапазон, который может управлять текущей функцией (или указывает на то, что конструктор, текущая функция). Полем
Кода -копия выглядит следующим образом:
функция a () {
this.name = 'a';
}
var a1 = new a ();
Это похоже на другие общие языки.
Затем изменение свойств прототипа, указывающего на объект, повлияет на все экземпляры, созданные с ним в виде шаблона.
Кода -копия выглядит следующим образом:
функция a () {
this.name = 'a';
}
var a1 = new a ();
A.Prototype.age = 1;
оповещение (a1.age);
Результаты: 1
Тогда почему объект A1 может напрямую получить доступ к возрастному атрибуту? Я не определяю возрастный атрибут в объекте A1.
Это связано с тем, что во всех случаях будет ссылка _proto_ (можно получить доступ непосредственно при Firfox, Chrome, но IE не поддерживает его), указывая на этот прототип, здесь он указывает на @A,
Кода -копия выглядит следующим образом:
функция a () {
this.name = 'a';
}
var a1 = new a ();
оповещение (a1._proto_ == A.prototype)
Результат: правда
Приступая к атрибутам, вы сначала найдете поиск в объекте A1. Не найдете его, вы вернетесь без определенного.
На этом этапе выходит значение цепочки прототипа. Object.Prototype-это прототип верхнего уровня, поэтому, если свойство объекта.
Глядя на кусок кода
Кода -копия выглядит следующим образом:
функция a () {
this.name = 'a';
}
функция b () {
this.age = 1;
}
B.Prototype = новый a ();
Alert (new B (). Имя);
Мы показываем, что B указывает на прототип B на экземпляр A, а затем экземпляр B также может получить доступ к свойствам A. Это наследование JavaScript, так почему же B.Prototype указывает на экземпляр A, а не прямо указывает на A.Protototype?
Кода -копия выглядит следующим образом:
B.Prototype = новый A.Prototype;
Если вы измените свойства в P.Protototype, как написано выше, то прототип также будет изменяться, что эквивалентно подклассу, изменяющему родительский класс, и свойства подкласса и родительского класса объединяются, что, очевидно неуместный. Другими словами, B также становится конструктором @a, а A и B становятся параллельными отношениями.
Мы можем определить это дальше:
Функция A Унаследовать функция B, которая является конструктором, которая делает функцию стать экземпляром прототипа функции b.
Кода -копия выглядит следующим образом:
var $ = jquery = function (selector, context) {
// Невозможно снова построить себя в своем собственном конструкторе, поэтому был возвращен другой экземпляр конструктора
вернуть новый init (селектор, контекст);
}
jquery.fn = jquery.prototype = {
размер: function () {
вернуть это.
}
}
Функция init (селектор, контекст) {
}
init.prototype = jQuery.fn ;;
}
Это кусок исходного кода jQuery.
Используя приведенные выше знание, можно объяснить, что jQuery - это просто призыв к общей функции, которая возвращает объект, созданный другим конструктором прототипа jQuery, то есть New init ()