Ketika saya melihat langkah pertama kode sumber jQuery, saya bingung tentang pembuatan benda -benda jQuery. Setelah memikirkannya untuk waktu yang lama, saya akhirnya merasakannya. Di sini saya merekamnya
Metode pertama:
var a = function () {return a.prototype.init ();} a.prototype = {init: function () {this.age = 50; console.log (ini); return ini;}, usia: 100} konsol.log (a () === a () baru ());1. Menganalisasikan mengapa hasilnya benar
Fungsi a.prototype.init () disebut secara internal oleh a ()
A New A () akan memanggil konstruktor secara internal, dan konstruktornya adalah fungsi () {return a.pototype.init ();}, dan panggilan yang sama adalah fungsi A.prototype.init ()
2.Analysis Apa yang dikembalikan fungsi a.prototype.init ()
Itu tergantung pada ini, tentukan siapa yang ditunjuk. Kita perlu menganalisisnya saat memanggil fungsi. Karena disebut sebagai atribut objek prototipe, ini adalah objek prototipe A.Prototype
Dengan cara penciptaan ini, tidak peduli berapa kali Anda menyebut A (), mereka sebenarnya adalah objek yang sama, sehingga modifikasi objek B akan memengaruhi objek A, lihat gambar di bawah ini
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);
Jadi bagaimana cara menyelesaikan masalah ini? Mari kita bicara tentang metode kedua, yang juga merupakan metode yang digunakan oleh jQuery.
Cara kedua
var a = function () {return new a.prototype.init (); // ①} a.prototype = {init: function () {this.age = 50; console.log (this); kembalikan ini;}, usia: 100}A.prototype.init.prototype = a.prototype; // ②var a = baru a (); var b = baru a (); console.log (a === b); console.log (a.age); console.log (b.age); b.age = 22; console.log (a.age); konsol.
Analisis ① dan ②
①Dalam a.prototype.init () baru terutama melakukan tiga hal
Buat objek kosong var obj = {};
obj objek properti_proto_ menunjuk ke prototipe fungsi a.prototype.init;
Ganti ini dalam fungsi a.prototype.init dengan objek OBJ, hubungi a.prototype.init Function, a.prototype.init.call (OBJ), dan kembalikan objek baru
Karena ① Prototipe objek yang dikembalikan adalah a.prototype.init.prototype, itu tidak ada hubungannya dengan A.Prototype. Untuk membuat objek yang baru dikembalikan diwariskan dari A.Prototype, ② Misalkan a.prototype.init.prototype titik ke A.Prototipe
Oleh karena itu, metode kedua adalah membuat instance, dan memastikan bahwa masing -masing ruang lingkupnya sendiri independen.
Di atas adalah penjelasan terperinci tentang contoh konstruksi bebas baru dari JavaScript yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda ingin mengetahui informasi lebih lanjut, harap perhatikan situs web Wulin.com!