Quando olhei para a primeira etapa do código -fonte jQuery, fiquei confuso sobre a criação de objetos jQuery. Depois de pensar nisso por um longo tempo, finalmente senti. Aqui eu gravo
O primeiro método:
var a = function () {return a.prototype.init ();} a.prototype = {init: function () {this.age = 50; console.log (this); return this;}, idade: 100} console.log (a () == novo a ());1.Alyze por que o resultado é verdadeiro
A função A.Prototype.init () é chamada internamente por A ()
O novo a () chamará o construtor internamente, e seu construtor é function () {return a.prototype.init ();}, e a mesma chamada é a função A.Prototype.init ()
2.Alálise O que a função A.Prototype.init () retorna
Depende disso, determine para quem isso aponta. Precisamos analisá -lo ao chamar a função. Como é chamado de atributo do objeto de protótipo, este é o protótipo objeto A.Prototype
Nesse modo de criação, não importa quantas vezes você chama A (), eles são realmente o mesmo objeto retornado, de modo que a modificação do objeto B afetará o objeto A, veja a figura abaixo
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);
Então, como resolver esse problema? Vamos falar sobre o segundo método, que também é o método usado pelo jQuery.
A segunda maneira
var a = function () {return new A.prototype.init (); // ①} a.prototype = {init: function () {this.age = 50; console.log (this); retorna tis;}, idade: 100}A.prototype.init.prototype = a.prototype; // ②var a = new a (); var b = novo a (); console.log (a === b); console.gog (a.age); consolo.gog (b.age);
Análise de ① e ②
① in New A.Prototype.init () faz principalmente três coisas
Crie um objeto vazio var obj = {};
object property_proto_ objas apontar para o protótipo de função a.prototype.init;
Substitua isso na função A.Prototype.init pelo objeto OBJ, ligue para a função A.Prototype.init, A.Prototype.init.Call (OBJ) e retorne o novo objeto
Como ① O protótipo do objeto retornado é a.prototype.init.prototype, ele não tem nada a ver com a.prototipo. Para fazer o objeto recém -devolvido herdar a.prototype, ② Deixe A.Prototype.init.Prototype Pond para A.Prototype
Portanto, o segundo método é criar uma instância e garantir que cada um de seu próprio escopo seja independente.
O exposto acima é uma explicação detalhada do novo exemplo de construção livre de JavaScript introduzido pelo editor. Espero que isso ajude você. Se você quiser saber mais informações, preste atenção ao site wulin.com!