Pinjam warisan konstruktor
Dalam memecahkan masalah termasuk nilai jenis referensi dalam prototipe, pengembang mulai menggunakan teknik yang disebut pencurian konstruktor pinjaman (kadang -kadang disebut objek palsu atau warisan klasik). Ide dasar dari teknik ini cukup sederhana, yaitu, menyebut konstruktor supertype di dalam konstruktor subtipe.
Mode Dasar
fungsi supertype () {this.colors = ["red", "blue", "green"];} function subtipe () {// Diwarisi supertype supertype.call (this);} var instance1 = new subtipe (); instance1.colors.push ("black"); waspada (instance1.colors); // "merah, biru, hijau, hitam" var instance2 = subtipe baru (); waspada (instance2.colors); // "merah, biru, hijau"Ide Dasar
Ide dasar konstruktor pinjaman adalah menggunakan panggilan atau berlaku untuk menyalin (meminjam) properti dan metode yang ditentukan dalam kelas induk ke dalam instance yang dibuat oleh subkelas. Karena objek ini terikat pada runtime berdasarkan lingkungan eksekusi fungsi. Artinya, secara global, ini sama dengan jendela, dan ketika fungsi disebut sebagai metode suatu objek, ini sama dengan objek itu. Metode Panggilan dan Terapkan dapat digunakan untuk memanggil metode alih -alih objek lain. Metode Panggilan dan Terapkan dapat mengubah konteks objek suatu fungsi dari konteks awal ke objek baru yang ditentukan oleh ThisOBJ.
Oleh karena itu, konstruktor pinjaman ini adalah, ketika objek baru dipanggil (perhatikan bahwa operator baru berbeda dari panggilan langsung. Ketika fungsi dipanggil, ini menunjuk ke jendela. Ketika yang baru dibuat, ini menunjuk ke instance yang dibuat), objek instance baru dibuat dan kode dalam subtipe dijalankan. Panggilan dalam panggilan subtipe supertyep, yang berarti bahwa titik ini diubah untuk menunjuk ke instance baru, sehingga atribut dan metode terkait dalam supertype ini akan ditetapkan ke instance baru, daripada menugaskan Suptype. Semua contoh memiliki sifat dan metode ini yang ditentukan oleh kelas induk.
Keuntungan
Dibandingkan dengan rantai prototipe, konstruktor pinjaman memiliki keuntungan besar, yaitu, mereka dapat meneruskan parameter ke konstruktor supertype dalam konstruktor subtipe. Karena atribut terikat pada ini, ia ditugaskan ke instance yang sesuai ketika dipanggil, dan nilai -nilai dari setiap instance tidak akan saling mempengaruhi.
Misalnya:
fungsi supertype (name) {this.name = name;} function subtipe () {// mewarisi supertype, dan juga melewati parameter supertype.call (this, "nicholas"); // instance atribute this.age = 29;} var instance = baru subtipe (); waspada (instance.name); //"Nicholas";alert(instance.age); // 29Kerugian
Jika Anda hanya meminjam konstruktor, maka masalah dengan pola konstruktor tidak akan dihindari - semua metode didefinisikan dalam konstruktor, jadi tidak ada cara untuk berbicara tentang fungsi kembali. Selain itu, metode yang didefinisikan dalam prototipe supertype juga tidak terlihat oleh subtipe, dan sebagai hasilnya, semua jenis hanya dapat menggunakan pola konstruktor. Mengingat masalah ini, teknik pinjaman konstruktor juga jarang digunakan sendiri.
Warisan Kombinasi
Kombinasi warisan, kadang-kadang disebut pseudo-klasik warisan. Ini adalah model warisan yang menggabungkan rantai prototipe dan meminjam teknologi konstruktor menjadi satu bagian, sehingga dapat memainkan kekuatan keduanya.
Ide Dasar
Idenya adalah untuk menggunakan rantai prototipe untuk mengimplementasikan pewarisan properti dan metode prototipe, dan untuk mengimplementasikan pewarisan properti instan dengan meminjam konstruktor. Dengan cara ini, multiplexing fungsi dicapai dengan mendefinisikan metode pada prototipe, dan juga dapat memastikan bahwa setiap instance memiliki atributnya sendiri.
Model dasar
fungsi supertype (name) {this.name = name; this.colors = ["red", "blue", "green"];} supertype.prototype.sayname = function () {alert (this.name);}; function subtipe (name, evene) {// atribut warisan supertype.call (ini, nama); this.age = age;}//Inheritance method SubType.prototype = new SuperType();SubType.prototype.constructor = SubType;SubType.prototype.sayAge = function(){alert(this.age);};var instance1 = new SubType("Nicholas", 29); instance1.colors.push ("hitam"); waspada (instance1.colors); // "merah, biru, hijau, hitam" instance1.sayname (); // "Nicholas"; instance1.sayage (); // 29var instance2 = subtipe baru ("greg", 27); waspada (instance2.colors); // "merah, biru, hijau" instance2.sayname (); // "greg"; instance2.sayage (); // 27Keuntungan
Kombinasi warisan menghindari cacat rantai prototipe dan konstruktor pinjaman, menggabungkan keunggulannya, dan menjadi pola warisan yang paling umum digunakan dalam JavaScript.
Kerugian
Masalah terbesar dengan pewarisan gabungan adalah bahwa dalam hal apa pun, konstruktor supertype akan dipanggil dua kali: sekali saat membuat prototipe subtipe, dan waktu lain di dalam konstruktor subtipe. Sementara subtipe pada akhirnya akan berisi semua sifat instance dari objek supertype, kita harus mengganti sifat -sifat ini saat memanggil konstruktor subtipe.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.