Mari kita selesaikan enkapsulasi dan warisan di JS yang berorientasi pada objek.
1. Kemasan
Ada banyak metode implementasi untuk enkapsulasi di JS, dan berikut adalah beberapa yang umum digunakan.
1.1 Objek Pembuatan Pola Asli
Tulis anggota kami langsung ke objek dan kembalikan dengan suatu fungsi. Kerugian: Sulit untuk melihat bahwa itu adalah contoh dari suatu pola.
Kode:
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
kembali {
Nama: Nama,
Skor: Skor
}
}
var stu1 = stu ("zhang san", 80);
var stu2 = stu ("li si", 90);
Console.log (Stu1.name); // Zhang San
1.2 menghasilkan objek pola yang dibangun
JS membantu kami memberikan pola untuk menghasilkan objek menggunakan konstruktor. Yang disebut "konstruktor" sebenarnya adalah fungsi biasa, tetapi variabel ini digunakan secara internal. Ketika kata kunci baru digunakan untuk menghasilkan instance konstruktor, variabel ini akan terikat pada objek instan.
Langsung unggah kode:
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
this.name = name,
this.score = skor
}
var stu1 = Stu baru ("Zhang San", 80);
var stu2 = stu baru ("li si", 90);
console.log (Stu1.name + "/" + stu2.score); // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // betul betul
console.log ((stu1 instanceof stu) + "/" + (stu2 instanceof stu)); // betul betul
Tidak sulit untuk melihat bahwa konstruktor JS menghasilkan objek dan C# dengan kelas menghasilkan objek. Keduanya menggunakan templat untuk mendefinisikan anggota objek instantiate mereka melalui kata kunci baru.
Menghasilkan objek Stu yang sama menggunakan kode C#
Salinan kode adalah sebagai berikut:
Kelas Stu
{
nama string publik;
skor ganda publik;
}
Oke, ini objek dasarnya. Jadi sekarang kita membutuhkan metode di mana semua objek adalah umum, dan kita hanya memiliki metode ini dibuat sekali. (Jangan berulang kali membuat objek baru) Apa yang harus saya lakukan? Semua orang tahu bahwa di C# kita dapat menggunakan anggota statis. Jadi bagaimana melakukannya di JS?
1.3 Mode Prototipe
Di JS, masing -masing konstruktor memiliki atribut prototipe, dan semua sifat dan metode objek ini akan diwarisi oleh instance konstruktor. Kemudian, menambahkan anggota ke prototipe secara langsung setara dengan menyatakan anggota statis di C#.
Kode:
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
this.name = name,
this.score = skor
}
Stu.prototype.type = 'siswa';
Stu.prototype.log = function (s) {
Console.log (S);
}
var stu1 = Stu baru ("Zhang San", 80);
var stu2 = stu baru ("li si", 90);
Console.log (Stu1.Type + "/" + Stu2.type); // Siswa
stu1.log ('halo'); // Halo
console.log (stu1.log == stu2.log); // BENAR
Itu semua tentang enkapsulasi. Mari kita lihat bagaimana warisan diimplementasikan dalam JS?
2. Warisan
2.1 Ikatan Konstruktor
Hubungi atau terapkan metode langsung dalam fungsi anak untuk mengikat konstruktor objek induk ke objek anak.
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
Grade.Apply (ini, argumen);
//Grade.call(This, argumen);
this.name = name,
this.score = skor
}
function grade () {
this.code = "Junior High School";
this.ask = function () {
Console.log ("Halo semuanya");
}
}
var stu1 = Stu baru ("Zhang San", 80);
var stu2 = stu baru ("li si", 90);
console.log (Stu1.code); // sekolah menengah pertama
Stu1.ask (); // halo semuanya
Apply melakukan dua hal di sini, masukkan parameter pertama ini ke konstruktor kelas (penelepon), dan kemudian jalankan kode di kelas. Ini setara dengan melaksanakan anggota yang ditentukan dalam nilai dengan ini di Stu lagi.
2.2 Warisan melalui prototipe
Lihat kode terlebih dahulu
Kode:
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
this.name = name,
this.score = skor
}
function grade () {
this.code = "Junior High School";
}
Stu.prototype = grade baru ();
Stu.prototype.constructor = stu; // Cegah Gangguan Rantai Warisan dan Atur Ulang Deklarasi Secara Manual
var stu1 = Stu baru ("Zhang San", 80);
var stu2 = stu baru ("li si", 90);
console.log (Stu.prototype.constructor); // Konstruktor sendiri
console.log (Stu1.code); // sekolah menengah pertama
Seperti yang disebutkan sebelumnya, prototipe setara dengan anggota statis di C#, jadi kami mengubah semua anggota kelas induk menjadi anggota statis mereka sendiri untuk mencapai warisan.
Ada kerugian dari warisan melalui prototipe: semua anggota yang diwariskan bersifat statis, jadi bagaimana cara mewarisi anggota objek?
2.3 Salin warisan
Salin semua properti dan metode objek induk ke dalam objek anak untuk mewujudkan warisan.
Kode:
Salinan kode adalah sebagai berikut:
function stu (name, skor) {
this.name = name,
this.score = skor
}
function grade () {}
Grade.prototype.code = "Junior High School";
}
// enkapsulasi fungsi
Fungsi memperpanjang (c, p) {
var p = p.prototype;
var c = c.prototype;
untuk (var i in p) {
c [i] = p [i];
}
}
memperpanjang (stu, grade);
var stu1 = Stu baru ("Zhang San", 80);
var stu2 = stu baru ("li si", 90);
stu1.code = 'sekolah menengah';
console.log (Stu1.code); // Sekolah menengah atas
Console.log (Stu2.code); // sekolah menengah pertama
console.log (Stu.prototype.constructor);
Console.log (grade.prototype.constructor)
Inilah yang saya tulis tentang organisasi berorientasi objek JS. Hal ini tidak statis. Saat menggunakannya, buat perubahan sesuai dengan kebutuhan Anda. Ada pepatah yang berjalan sangat baik, yang tepat adalah yang terbaik.
Ini hanya dianalisis untuk enkapsulasi dan warisan. Kami akan melakukan beberapa artikel lain di masa depan untuk membiarkan teman memiliki pemahaman yang lebih dalam tentang pemrograman berorientasi objek JavaScript. Tentu saja, itu semua pemahaman pribadi. Jika ada kelalaian, silakan hubungi saya.