Rumah > hujung hadapan web > Soal Jawab bahagian hadapan > Adakah terdapat polimorfisme dalam javascript?

Adakah terdapat polimorfisme dalam javascript?

WBOY
Lepaskan: 2022-07-01 16:06:27
asal
1904 orang telah melayarinya

Polymorphism dalam JavaScript bermaksud bahawa operasi yang sama boleh menghasilkan tafsiran yang berbeza dan hasil pelaksanaan yang berbeza apabila digunakan pada objek yang berbeza dalam JavaScript ditunjukkan dalam subkelas dan boleh dilaksanakan secara langsung dengan nama yang sama fungsi kelas induk, dan fungsi kelas induk dalam JavaScript boleh ditindih terus.

Adakah terdapat polimorfisme dalam javascript?

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.

Polimorfisme dalam JavaScript

Maksud

Operasi yang sama bertindak pada objek yang berbeza, yang boleh menghasilkan tafsiran yang berbeza dan hasil pelaksanaan yang berbeza

Sebagai contoh, saya mempunyai kucing dan anjing Jika saya memberi mereka arahan yang sama "menyalak", kucing akan mengeong dan anjing akan menyalak, jadi meminta mereka menyalak adalah perintah yang sama, dan panggilan yang berbeza adalah berbeza hasil pelaksanaan.

Pelaksanaan kod pseudo adalah seperti ini:

function getVoice(animals) {
    if(animals instanceof Cat){
        console.log('喵~');
        
    }
    if(animals instanceof Dog){
        console.log('汪~');
    }
}
class Cat {}
class Dog {}
getVoice(new Cat()); // '喵~'
getVoice(new Dog()); // '汪~'
Salin selepas log masuk

Jadi bagaimana jika kita ingin menambah haiwan? Tambah satu lagi penghakiman? Kemudian setiap kali saya ingin menambah bunyi haiwan, saya perlu mengubah suai getVoice? Tidakkah ia agak menyusahkan?

Jadi kita kena fikir cara nak selesaikan masalah ni~

Polymorphism of objects

Malah, fungsi paling asas polimorfisme ialah menukar pernyataan bersyarat prosedur kepada Object polimorfisme, dengan itu menghapuskan pernyataan cawangan bersyarat ini.

Dalam istilah awam, ini bermaksud memisahkan "apa yang perlu dilakukan" daripada "siapa yang melakukannya dan bagaimana untuk melakukannya". Ringkasan abstrak bermaksud memisahkan "perkara yang tidak berubah" daripada "perkara yang mungkin berubah ”.

Contoh yang kami berikan pada permulaan boleh dipecahkan dan difahami seperti berikut:

Perkara yang kekal tidak berubah ialah: haiwan membuat bunyi bunyi Bunyi

Kemudian kita boleh mengedarkan tindakan "haiwan membuat bunyi" kepada pelbagai kelas (merangkumkannya dalam setiap kelas), dan kemudian memanggil tindakan "panggilan" dalam fungsi getVoice yang menghasilkan bunyi .

Contoh di atas boleh diubah suai seperti ini~

function getVoice (animals) {
    if (animals.sound instanceof Function) {
        // 判断是否有animal.sound且该属性为函数
        animals.sound();
    }
}
class Cat {
    sound () {
        console.log('喵~');
    }
}
class Dog {
    sound () {
        console.log('汪~');
    }
}
getVoice(new Cat()); // '喵~'
getVoice(new Dog()); // '汪~'
Salin selepas log masuk

Aplikasi praktikal polimorfisme

Polymorfisme digunakan secara meluas dalam corak reka bentuk, seperti corak gabungan /mod Strategi dan seterusnya. ~~

Walaupun kami tidak menggunakannya dalam pembangunan harian, polimorfisme masih sangat berguna apabila kami melibatkan beberapa corak reka bentuk

JS enkapsulasi dan Polimorfisme

Selain pewarisan, enkapsulasi dan polimorfisme juga merupakan komponen pemikiran berorientasikan objek. Enkapsulasi dan polimorfisme JS juga direalisasikan melalui aplikasi fleksibel atribut "simulasi".

Encapsulation boleh disimulasikan dengan menetapkan sifat awam dalam kelas dan melaksanakannya dalam subkelas.

Perwujudan polimorfisme adalah lebih mudah dengan melaksanakan fungsi nama yang sama dalam subkelas boleh mengatasi fungsi kelas induk. Tiada kata kunci virtualde dalam JS yang serupa dengan dalam C#, dan semua fungsi kelas induk boleh ditindih terus.

Contoh:

function calc(value1,value2){
this.data1=value1;
this.data2=value2; 
this.GetResult;
this.toString=function(){
if(this.GetResult)
return this.GetResult()+"";
return "0";
}
}
 
function sumCalc(value1,value2){
calc.call(this,value1,value2)
this.GetResult=function(){ 
return this.data1+this.data2;
}
}
function productCalc(value1,value2){
calc.call(this,value1,value2)
this.GetResult=function(){ 
return this.data1*this.data2;
}
}
var s=new sumCalc(2,3);
alert(s.toString());  //弹框5
var p=new productCalc(2,3);
alert(p.toString());  //弹框6
Salin selepas log masuk

Seperti di atas, kedua-dua kelas sumCalc dan kelas productCalc mewarisi dan melaksanakan kelas calc dan melaksanakan "fungsi abstrak" GetResult(). Beginilah cara enkapsulasi JS dilaksanakan.

Selain itu, semua kelas dalam JS mewarisi daripada Object, dan Object mempunyai fungsi toString() sendiri. Oleh itu, fungsi toString() kelas calc di atas sebenarnya meliputi fungsi asal-manifestasi polimorfisme.

[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]

Atas ialah kandungan terperinci Adakah terdapat polimorfisme dalam javascript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan