Kita tahu bahwa JS berorientasi objek. Ketika datang ke orientasi objek, tidak dapat dihindari untuk melibatkan konsep kelas. Secara umum, bahasa yang sangat diketik seperti C# dan Java memiliki sintaks tetap untuk menentukan kelas. Perbedaan antara JS adalah bahwa ia dapat menggunakan berbagai metode untuk mengimplementasikan kelas dan objeknya sendiri. Ada beberapa metode implementasi umum:
1. Metode pabrik
Metode pabrik mengacu pada membuat fungsi pabrik yang mengembalikan jenis objek tertentu.
Salinan kode adalah sebagai berikut:
Fungsi CreateCar (Scolor, Idoors, IMPG)
{
var otempcar = objek baru;
otempcar.color = scolor;
otempcar.doors = idoors;
otempcar.mpg = impg;
otempcar.showcolor = function ()
{
waspada (this.color);
}
mengembalikan otempcar;
}
var ocar1 = createCar ("merah", 4,23);
var ocar2 = createCar ("biru", 3,25);
ocar1.showcolor ();
ocar2.showcolor ();
Dengan cara ini, setiap kali ia menyebut fungsi pabriknya, objek baru akan dibuat. Tetapi masalahnya adalah bahwa setiap kali objek baru dihasilkan, fungsi baru ShowColor harus dibuat, yang membuat setiap objek memiliki versi sendiri dari ShowColor, dan pada kenyataannya, semua objek berbagi fungsi yang sama. adalah metode objek didefinisikan di luar fungsi pabrik, dan kemudian objek diberikan pointer ke fungsi, sebagai berikut
Salinan kode adalah sebagai berikut:
fungsi showcolor ()
{
waspada (this.color);
}
Fungsi CreateCar (Scolor, Idoors, IMPG)
{
var otempcar = objek baru;
otempcar.color = scolor;
otempcar.doors = idoors;
otempcar.mpg = impg;
otempcar.showcolor = showcolor;
mengembalikan otempcar;
}
var ocar1 = createCar ("merah", 4,23);
var ocar2 = createCar ("biru", 3,25);
ocar1.showcolor ();
ocar2.showcolor ();
Dengan cara ini, tidak perlu membuat fungsi showcolor sendiri untuk setiap objek, tetapi hanya membuat pointer untuk fungsi ini. Oleh karena itu, metode konstruktor diperkenalkan.
2. Metode Konstruktor
Konstruktor sangat mirip dengan fungsi pabrik, kode contoh adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
Function Car (Scolor, Idoors, IMPG)
{
this.color = scolor;
this.doors = iDoors;
this.mpg = impg;
this.showcolor = function ()
{
waspada (this.color);
}
}
var ocar1 = mobil baru ("merah", 4,23);
var ocar2 = mobil baru ("biru", 3,25);
Di konstruktor, tidak ada objek yang dibuat secara internal, tetapi kata kunci ini digunakan. Saat memanggil konstruktor menggunakan operator baru, suatu objek dibuat sebelum menjalankan baris kode pertama. Tapi masalah apa yang akan terjadi dengan ini? Untuk mengatasi masalah ini, metode prototipe berikut diperkenalkan.
3. Metode prototipe
Metode ini memanfaatkan properti prototipe objek, yang dapat dianggap sebagai prototipe di mana objek baru bergantung. Di sini, gunakan konstruktor kosong untuk mengatur nama kelas. Maka semua metode dan atribut langsung ditetapkan ke atribut prototipe. sebagai berikut:
Salinan kode adalah sebagai berikut:
function car ()
{}
Car.prototype.color = "merah";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.drivers = array baru ("mike", "sue");
Car.prototype.showcolor = function ()
{
waspada (this.color);
}
Metode prototipe hanya dapat menetapkan nilai secara langsung, dan tidak dapat meneruskan parameter ke konstruktor nilai inisialisasi atribut. Saat menggunakan metode ini, Anda akan menghadapi dua masalah. Masalah pertama adalah bahwa setiap objek harus dibuat sebelum nilai default atribut dapat diubah dengan cara ini. Tidak mungkin untuk secara langsung memiliki nilai properti yang Anda butuhkan saat membuat setiap objek. Ini menjengkelkan. Masalah kedua adalah ketika atribut mengacu pada objek. Tidak akan ada masalah dengan berbagi fungsi, tetapi akan ada masalah dengan berbagi objek. Karena setiap contoh umumnya perlu menerapkan objeknya sendiri.
Sebagai berikut:
Salinan kode adalah sebagai berikut:
var ocar1 = mobil baru ();
var ocar2 = mobil baru ();
ocar1.drivers.push ("matt");
alert (ocar1.drivers); // output "Mike, Sue, Matt"
alert (ocar2.drivers); // output "Mike, Sue, Matt"
Oleh karena itu atribut driver hanyalah pointer ke objek, jadi semua contoh sebenarnya berbagi objek yang sama. Karena masalah ini, kami memperkenalkan metode konstruktor dan prototipe penggunaan bersama berikut.
4. Metode konstruktor/prototipe campuran
Gagasan dari metode ini adalah menggunakan konstruktor untuk menentukan semua sifat non-fungsional suatu objek (termasuk sifat biasa dan atribut yang menunjuk ke objek), dan menggunakan prototipe untuk menentukan sifat fungsi (metode) objek. Hasilnya adalah bahwa semua fungsi dibuat hanya sekali, dan setiap objek memiliki instance atribut objek sendiri. Kode sampel adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
Function Car (Scolor, Idoors, IMPG)
{
this.color = scolor;
this.doors = iDoors;
this.mpg = impg;
this.drivers = array baru ("mike", "sue");
}
Car.prototype.showcolor = function ()
{
waspada (this.color);
}
var ocar1 = mobil baru ("merah", 4,23);
var ocar2 = mobil baru ("biru", 3,25);
ocar1.drivers.push ("matt");
alert (ocar1.drivers); // output "Mike, Sue, Matt"
alert (ocar2.drivers); // output "mike, sue"
Seperti yang dapat dilihat dari kode contoh, metode ini memecahkan dua masalah dalam metode sebelumnya secara bersamaan. Namun, dengan cara ini, beberapa pengembang masih merasa tidak sempurna.
5. Metode Prototipe Dinamis
Kita dapat melihat bahwa sebagian besar bahasa yang berorientasi objek merangkum sifat dan metode secara visual. Namun, metode showcolor dalam metode di atas didefinisikan di luar kelas. Oleh karena itu, mereka merancang pendekatan prototipe dinamis. Gagasan dasar dari pendekatan ini sama dengan pendekatan konstruktor/prototipe campuran, satu -satunya perbedaan adalah lokasi metode objek. Seperti yang ditunjukkan di bawah ini:
Salinan kode adalah sebagai berikut:
Function Car (Scolor, Idoors, IMPG)
{
this.color = scolor;
this.doors = iDoors;
this.mpg = impg;
this.drivers = array baru ("mike", "sue");
if (typeof car._initialized == "tidak terdefinisi")
{
Car.prototype.showcolor = function ()
{
waspada (this.color);
}
}
Car._initialized = true;
}
Dengan cara ini car.prototype.showcolor dibuat hanya sekali. Ketergantungan ini membuat kode ini lebih seperti definisi kelas dalam bahasa lain.
6. Metode Pabrik Campuran
Pendekatan ini biasanya merupakan solusi yang tidak dapat digunakan sebagai pendekatan sebelumnya. Tujuannya adalah untuk membuat konstruktor palsu yang hanya mengembalikan contoh baru dari objek lain.
Salinan kode adalah sebagai berikut:
fungsi createCar ()
{
var otempcar = objek baru;
otempcar.color = "merah";
otempcar.doors = 4;
otempcar.mpg = 23;
otempcar.showcolor = function ()
{
waspada (this.color);
};
mengembalikan otempcar;
}
var mobil = mobil baru ();
Karena operator baru dipanggil di dalam konstruktor mobil (), operator baru kedua secara otomatis diabaikan. Objek yang dibuat di dalam konstruktor diteruskan kembali ke variabel var. Pendekatan ini memiliki masalah yang sama dengan pendekatan klasik dalam hal manajemen internal metode objek. Oleh karena itu, sangat disarankan: hindari menggunakan metode ini kecuali itu mutlak diperlukan.