Terdapat banyak cara untuk menentukan kelas dalam JS:
1. Kaedah kilang
fungsi Kereta(){
var ocar = Objek baharu;
ocar.color = "biru";
ocar.doors = 4;
ocar.showColor = function(){
Document.write(this.color)
};
Kembalikan ocar
}
var car1 = Kereta();
var car2 = Kereta();
Apabila fungsi ini dipanggil, objek baharu akan dicipta dan semua sifat dan kaedah akan diberikan kepadanya. Gunakan fungsi ini untuk mencipta 2 objek dengan sifat yang sama. Sudah tentu, kakak saya boleh mengubah suai kaedah ini dengan menghantar parameter kepadanya.
Salin kod
Kod adalah seperti berikut:
fungsi Kereta(warna,pintu){
var ocar = Objek baharu;
ocar.color = warna;
ocar.doors = pintu;
ocar.showColor = function(){
Document.write(this.color)
};
Kembalikan ocar
}
var car1 = Kereta("merah",4);
var car2 = Kereta("biru",4);
car1.showColor() //output:"merah"
car2.showColor() //output:"biru"
Kini anda boleh mendapatkan objek dengan nilai berbeza dengan menghantar parameter berbeza kepada fungsi.
Dalam contoh sebelumnya, showcolor() dicipta setiap kali fungsi Car() dipanggil, yang bermaksud bahawa setiap objek mempunyai kaedah showcolor() sendiri.
Tetapi sebenarnya, setiap objek berkongsi fungsi yang sama.
Walaupun adalah mungkin untuk mentakrifkan kaedah di luar fungsi dan kemudian menunjuk sifat fungsi kepada kaedah.
Salin kod
Kod adalah seperti berikut:
fungsi showColor(){
Tetapi ini tidak kelihatan seperti kaedah fungsi.
2. Kaedah Pembina
Kaedah pembina adalah semudah kaedah kilang, seperti yang ditunjukkan di bawah:
Salin kod
Kod adalah seperti berikut:
fungsi Kereta(warna,pintu)
Anda boleh melihat bahawa kaedah pembina tidak mencipta objek di dalam fungsi, tetapi menggunakan kata kunci ini. Kerana objek telah dibuat apabila pembina dipanggil, dan hanya ini boleh digunakan untuk mengakses sifat objek di dalam fungsi.
Sekarang gunakan baharu untuk mencipta objek, ia kelihatan seperti ini! Tetapi ia sama dengan pendekatan kilang. Setiap panggilan mencipta kaedah sendiri untuk objek.
3. Kaedah prototaip
Kaedah ini menggunakan atribut prototaip objek. Mula-mula nama kelas dicipta dengan fungsi kosong, kemudian semua sifat dan kaedah diberikan atribut prototaip.
Salin kod
Kod adalah seperti berikut:
fungsi Kereta()
Dalam kod ini, fungsi kosong ditakrifkan dahulu, dan kemudian sifat objek ditakrifkan melalui atribut prototaip. Apabila fungsi ini dipanggil, semua sifat prototaip akan diberikan dengan serta-merta kepada objek yang akan dibuat Semua objek fungsi ini menyimpan penunjuk ke showColor(), dan secara sintaksis semuanya kelihatan milik objek yang sama.
Walau bagaimanapun, fungsi ini tidak mempunyai parameter, dan sifat tidak boleh dimulakan dengan menghantar parameter Nilai lalai sifat mesti ditukar selepas objek dibuat.
Masalah yang sangat serius dengan kaedah prototaip ialah apabila sifat menunjuk ke objek, seperti tatasusunan.
Salin kod
Kod adalah seperti berikut:
fungsi Kereta(){
}
Car.prototype.color = "merah";
Kereta.prototaip.pintu = 4
Car.prototype.arr = new Array("a","b");
Car.prototype.showColor = function(){
makluman(warna ini);
}
var car1 = new Car();
var car2 = Kereta baharu();
car1.arr.push("cc");
alert(car1.arr); //output:aa,bb,cc
alert(car2.arr); //output:aa,bb,cc
Disebabkan nilai rujukan tatasusunan, kedua-dua objek Kereta menghala ke tatasusunan yang sama, jadi apabila nilai itu ditambahkan pada car1, ia juga boleh dilihat dalam car2.
Kesatuan ialah kaedah yang menggunakan kaedah pembina/prototaip untuk mencipta objek seperti bahasa pengaturcaraan lain Ia menggunakan pembina untuk menentukan atribut bukan fungsi objek dan kaedah prototaip untuk menentukan objek.
Salin kod
}
Car.prototype.showColor(){
makluman(warna ini);
}
var car1 = new Car("merah",4);
var car2 = new Car("biru",4);
car1.arr.push("cc");
alert(car1.arr); //output:aa,bb,cc
alert(car2.arr); //output:aa,bb
4. Kaedah prototaip dinamik
Prinsip kaedah prototaip dinamik adalah serupa dengan kaedah pembina/prototaip campuran. Satu-satunya perbezaan adalah di mana kaedah objek ditetapkan.
Salin kod
Kod adalah seperti berikut:
Kereta._dimulakan = benar;
}
}
Kaedah prototaip dinamik menggunakan bendera untuk menentukan sama ada kaedah telah diberikan kepada prototaip. Ini memastikan kaedah hanya dibuat sekali
6. Mencampur kaedah kilang
Tujuannya adalah untuk mencipta pembina palsu yang hanya mengembalikan contoh baharu objek lain.
Salin kod
Kod adalah seperti berikut:
fungsi Kereta(){
var ocar = new Object();
ocar.color = "merah";
ocar.doors = 4;
ocar.showColor = function(){
makluman(warna.ini)
};
Kembalikan ocar
}
Perbezaan dari kaedah kilang ialah kaedah ini menggunakan operator baru.
PS (pemahaman peribadi):
1) Ahli (kaedah atau atribut) yang ditakrifkan oleh kelas melalui prototaip adalah biasa untuk setiap objek kelas dan biasanya tidak digunakan untuk mentakrifkan atribut ahli Jika satu objek mengubah nilai atribut, semua objek akan diubah suai >
2) Kelas mempunyai atribut prototaip, tetapi objek kelas tidak
3) Setiap kali objek kelas baharu atau kelas dipanggil terus (dalam bentuk kaedah kilang di bawah), pernyataan yang mentakrifkan kelas (fungsi) akan dilaksanakan sekali (mod tunggal boleh mengelakkan situasi ini);
4) Kelas adalah jenis fungsi, objek kelas adalah jenis objek, dan hanya jenis fungsi mempunyai atribut prototaip
5) Kaedah yang ditakrifkan oleh prototaip tidak boleh mengakses pembolehubah persendirian kelas (pembolehubah tempatan yang ditakrifkan oleh kelas), tetapi boleh mengakses sifat ahli dan kaedah ahli kelas (pembolehubah dan kaedah yang ditakrifkan oleh ini) melalui ini;
6) Bagaimana untuk menentukan kelas:
a. Kaedah kilang (Objek)
b. Kaedah pewarisan (prototaip)
c. Kaedah Pembina (ini)
d. Kaedah adunan
7) [Soalan] Mengapakah sifat yang ditakrifkan melalui prototaip boleh diubah oleh mana-mana objek? Dan sifat yang ditakrifkan dalam kaedah pembina hanya milik objek dan tidak akan menjejaskan nilai harta objek lain?
Di atas adalah semua kaedah untuk mencipta objek. Kaedah yang paling banyak digunakan pada masa ini ialah kaedah pembina/prototaip campuran Selain itu, kaedah prototaip dinamik juga sangat popular. Secara fungsional bersamaan dengan pendekatan pembina/prototaip.