Ada beberapa cara umum untuk mendefinisikan kelas atau objek dalam JavaScript: pendekatan pabrik
fungsi membuat Mobil(warna, pintu, mpg){
var tempCar = Objek baru ;
tempCar.color = warna;
tempCar.doors = pintu;
tempCar.mpg = mpg;
tempCar.showColor = fungsi (){
waspada( ini .warna);
};
kembalikan tempCar;
}
var mobil1 = buatMobil("merah", 4, 23);
var car2 = createCar("biru", 3, 25);
mobil1.showColor();
mobil2.showColor();
Mendefinisikan fungsi pabrik yang dapat membuat dan mengembalikan objek dengan tipe tertentu. Kelihatannya bagus, tapi ada masalah kecil. Fungsi showColor baru harus dibuat setiap kali dipanggil. fungsi tampilkanWarna(){ alert(ini.warna); } Arahkan langsung ke fungsi pabrik tempCar.showColor = showColor; Ini menghindari masalah pembuatan fungsi berulang kali, tetapi ini tidak terlihat seperti metode objek. Mode konstruktor
fungsi Mobil(sColor, iDoors, iMpg){
ini .warna = sWarna;
ini .pintu = iDoors;
ini .mpg = iMpg;
ini .showColor = fungsi (){
waspada( ini .warna);
};
}
var mobil1 = Mobil baru ("merah", 4, 23);
var car2 = Mobil baru ("biru", 3, 25);
mobil1.showColor();
mobil2.showColor();
Anda dapat melihat perbedaannya dari metode pertama. Tidak ada objek yang dibuat di dalam konstruktor, tetapi kata kunci this digunakan. Saat memanggil konstruktor menggunakan yang baru, sebuah objek pertama kali dibuat dan kemudian diakses menggunakan ini. Penggunaannya sangat mirip dengan bahasa berorientasi objek lainnya, namun cara ini memiliki permasalahan yang sama dengan cara sebelumnya, yaitu membuat fungsi secara berulang-ulang. Pendekatan konstruktor/prototipe hibrid untuk konstruksi
Metode ini menggunakan metode konstruktor dan metode prototipe secara bersamaan. Menggabungkan kelebihannya, metode konstruktor telah diperkenalkan sebelumnya. fungsi Mobil(){
}
Mobil.prototipe.warna = "merah";
Mobil.prototipe.pintu = 4;
Mobil.prototipe.mpg = 23;
Mobil.prototipe.showColor = fungsi (){
waspada( ini .warna);
};
var mobil1 = Mobil baru ();
var mobil2 = Mobil baru ();
Pertama, konstruktor Car didefinisikan tanpa kode apa pun, dan kemudian properti ditambahkan melalui prototipe keuntungan: a. Semua instance menyimpan pointer ke showColor, yang memecahkan masalah pembuatan fungsi berulang kali. b. Anda dapat menggunakan instanceof untuk memeriksa jenis objek alert(car1 instanceof Mobil); //benar Kekurangannya, tambahkan kode berikut:
Mobil.prototipe.drivers = new Array("mike", "sue");
mobil1.drivers.push("matt");
alert(car1.drivers); //keluaran "mike,sue,matt"
alert(car2.drivers); //keluaran "mike,sue,matt"
driver adalah penunjuk ke objek Array, dan kedua instance Car menunjuk ke array yang sama.
Mari gunakan metode pencampuran berikut: fungsi Mobil(sColor, iDoors, iMpg){
ini .warna = sWarna;
ini .pintu = iDoors;
ini .mpg = iMpg;
ini .drivers = new Array("mike", "sue");
}
Mobil.prototipe.showColor = fungsi (){
waspada( ini .warna);
};
var mobil1 = Mobil baru ("merah", 4, 23);
var car2 = Mobil baru ("biru", 3, 25);
mobil1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);
Dengan cara ini tidak ada masalah, dan Anda juga dapat menggunakan instanceof pembuatan prototipe dinamis
fungsi Mobil(sColor, iDoors, iMpg){
ini .warna = sWarna;
ini .pintu = iDoors;
ini .mpg = iMpg;
ini .drivers = new Array("mike", "sue");
if ( typeof Car.initialized == "tidak terdefinisi"){
Mobil.prototipe.showColor = fungsi (){
waspada( ini .warna);
};
Mobil.diinisialisasi = true ;
}
}
var mobil1 = Mobil baru ("merah", 4, 23);
var car2 = Mobil baru ("biru", 3, 25);
mobil1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);
Metode ini adalah favorit saya. Semua definisi kelas diselesaikan dalam suatu fungsi. Sepertinya definisi kelas dalam bahasa lain tidak akan dibuat berulang kali