Когда я посмотрел на первый шаг исходного кода jQuery, я был замешан о создании объектов jQuery. Подумав об этом в течение долгого времени, я наконец почувствовал это. Здесь я записываю это
Первый метод:
var a = function () {return a.prototype.init ();} a.prototype = {init: function () {this.age = 50; console.log (this); вернуть это;}, возраст: 100} console.log (a () === new a ());1. анализация того, почему результат правда
Функция a.prototype.init () называется внутренне A ()
Новый a () будет вызывать конструктор внутренне, а его конструктор - function () {return a.prototype.init ();}, а тот же вызов - функция A.prototype.init ()
2. Анализ, что возвращает функция A.Prototype.Init ()
Это зависит от этого, определите, кого это указывает. Нам нужно проанализировать его при вызове функции. Поскольку он называется атрибутом объекта прототипа, это объект прототипа A.Prototype
В этом способе создания, независимо от того, сколько раз вы называете A (), они на самом деле являются тем же объектом, возвращаемым, поэтому модификация объекта B повлияет на объект A, см. Рисунок ниже
var a = a (); var b = a (); console.log (a.age); console.log (b.age); b.age = 22; console.log (a.age); console.log (b.age); console.log (b.age);
Так как решить эту проблему? Давайте поговорим о втором методе, который также является методом, используемым JQuery.
Второй путь
var a = function () {return new a.prototype.init (); // ①} a.prototype = {init: function () {this.age = 50; console.log (this); вернуть это;}, возраст: 100}A.Prototype.Init.Prototype = A.Prototype; // ②var a = new a (); var b = new a (); консоль.log (a === b); консоль.log (A.Age); консоль.
Анализ ① и ②
①in new a.prototype.init () в основном делает три вещи
Создать пустой объект var obj = {};
obj Object Property_proto_ указывает на прототип функции A.Prototype.Init;
Замените это в A.Prototype.Init Функция с объектом OBJ, Call A.Prototype.Init Функция, A.Prototype.init.call (obj) и верните новый объект
Поскольку ① Прототип возвращаемого объекта является a.prototype.init.prototype, он не имеет ничего общего с A.Prototype. Чтобы сделать недавно возвращенный объект унаследовать от A.Prototype, ② Пусть A.Prototype.Init.Prototype указывает на A.Prototype
Следовательно, второй метод состоит в том, чтобы создать экземпляр и убедиться, что каждый из своих собственных областей является независимым.
Выше приведено подробное объяснение нового примера для конструкции бесплатного JavaScript, представленного вам редактором. Я надеюсь, что это поможет вам. Если вы хотите узнать больше информации, обратите внимание на веб -сайт wulin.com!