Saya pikir setiap orang memiliki pendapat sendiri tentang apakah JavaScript adalah bahasa yang berorientasi objek atau bahasa yang berorientasi objek. Penggemar JavaScript yang setia harus mengatakan bahwa JavaScript adalah bahasa yang berorientasi objek. Sebagai contoh, pernyataan tentang JavaScript dalam buku "The Return of the King of JavaScript" didasarkan pada prototipe yang berorientasi objek. Izinkan saya berbicara tentang pendapat pribadi saya. Tiga fitur yang berorientasi objek: warisan, polimorfisme, dan enkapsulasi. Meskipun JavaScript tidak secepat bahasa yang berorientasi objek seperti Java dan C#, ia juga memiliki dukungan tertentu. Oleh karena itu, masuk akal untuk mengatakan bahwa JavaScript adalah bahasa yang berorientasi objek, tetapi dari bagian warisan, ada serangkaian metode warisan, tetapi setiap metode warisan tidak dapat mewujudkan kekuatan bahasa yang benar-benar berorientasi objek. Oleh karena itu, sangat dibuat-buat untuk mengatakan bahwa itu berorientasi objek. Singkatnya, pemahaman saya tentang JavaScript lebih bersedia menyebutnya sebagai objek yang berorientasi objek yang disederhanakan, atau "semu" (kata-kata semu ini tidak memiliki makna yang merendahkan).
Hari ini, mari kita bicara tentang fitur pertama yang berorientasi pada objek: warisan.
Apa itu warisan? Saya tidak ingin berbicara omong kosong tentang ini. Ada binatang, seseorang, dan seorang gadis. Ini adalah rantai warisan paling sederhana dan khas.
Dalam berorientasi objek seperti C#, mudah.
Salinan kode adalah sebagai berikut:
Hewan kelas
{}
Orang Kelas: Hewan
{}
Gadis Kelas: Orang -orang
{}
Jadi dalam JavaScript, tidak ada kelas atau warisan untuk memberikan implementasi, apa yang harus kita lakukan?
Penyamaran objek (metode warisan konstruksi)
Apa itu kamuflase objek? Apa yang kita sebut warisan konstruk lebih mudah dipahami. Seperti namanya, ini adalah menggunakan konstruktor untuk bermain dengan warisan. Bahkan, itu berarti bahwa konstruktor kelas induk dianggap sebagai metode biasa dan memasukkannya ke dalam konstruktor subkelas untuk dieksekusi. Dengan cara ini, saat membuat objek, objek subkelas tentu saja dapat membangun metode kelas induk!
Mari kita gunakan contoh di atas, kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
fungsi hewan ()
{
this.run = function () {alert ("I Can Run");};
}
Fungsi Orang (Nama)
{
// Di sini, metode konstruksi kelas induk dilewati, dan kemudian metode konstruksi kelas induk dieksekusi. Pada saat ini, metode di kelas induk dapat digunakan.
this.father = hewan;
this.father ();
// Ingatlah untuk menghapusnya, jika tidak ketika subkelas ditambahkan ke metode dengan nama yang sama dengan kelas induk, itu akan dimodifikasi ke kelas induk.
Hapus ini. Ayah;
this.name = name;
this.say = function () {alert ("nama saya"+this.name);}
}
Function Girl (nama, usia)
{
this.father = orang;
this.father (nama);
Hapus ini. Ayah;
this.age = usia;
this.introduce = function () {alert ("nama saya adalah"+this.name+". I am"+this.age);};
}
Dengan cara ini, rantai warisan diimplementasikan, dan tesnya adalah:
Salinan kode adalah sebagai berikut:
var a = hewan baru ();
a.run ();
var p = orang baru ("windking");
p.run ();
p.say ();
var g = gadis baru ("xuan", 22);
g.run ();
g.say ();
g.introduce ();
Hasilnya adalah sebagai berikut:
A.
B.
C.
D.
e.
F.
Tes berhasil!
Mari kita ringkas kunci kode ini, tentukan kelas induk, nyatakan objek kelas induk, dan kemudian hapus variabel sementara. Apakah Anda pikir itu agak merepotkan? Setidaknya itulah yang saya pikirkan. Begitu saya lupa menghapus, saya harus menanggung risiko kelas induk yang dimodifikasi. Untuk ini, kami menggunakan panggilan dan mendaftar untuk memperbaiki ini!
Mari kita lihat kode, dan contoh di atas (untuk memudahkan semua orang untuk memahami, kebutuhan untuk mengubahnya, hewan memiliki nama):
Salinan kode adalah sebagai berikut:
fungsi hewan (nama)
{
this.run = function () {alert ("I Can Run");};
}
Fungsi Orang (Nama)
{
// Gunakan metode panggilan untuk mengimplementasikan warisan
this.father = hewan;
this.father.call (ini, nama);
this.name = name;
this.sayname = function () {alert ("nama saya adalah"+this.name;);};
}
Function Girl (nama, usia)
{
// Gunakan metode Apply untuk mengimplementasikan warisan
this.father = orang;
this.father.Apply (ini, array baru (nama));
this.age = usia;
this.introduce = function () {alert ("nama saya adalah"+this.name+". I am"+this.age);};
}
Menggunakan kode uji yang sama, ditemukan bahwa tes itu sama berhasil.
Jika Anda seorang pemula, Anda mungkin merasa sedikit pusing ketika Anda melihat dua kode di bawah ini. Apa itu panggilan dan apa yang diterapkan? OK, dalam topik khusus warisan Wanzhuan, saya telah menambahkan seri edisi tambahan. Jika Anda tidak mengerti ini, Anda dapat membaca artikel saya: "Word of Wanzhuan: Panggil dan Terapkan".
Perselisihan objek hanyalah cara untuk mengimplementasikan warisan. Pada artikel berikutnya, saya akan terus menulis tentang metode warisan lainnya dan kelebihan dan kerugian dari beberapa metode warisan. Selamat datang untuk terus memperhatikan.