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.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.
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()); // '汪~'
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()); // '汪~'
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
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!