Polymorphisme en JavaScript ; le polymorphisme signifie que la même opération peut produire différentes interprétations et résultats d'exécution lorsqu'elle est appliquée à différents objets. Le polymorphisme en JavaScript se reflète dans les sous-classes et peut être remplacé en implémentant directement la fonction du même nom. Les fonctions de classe parent en JavaScript peuvent être directement remplacées.
L'environnement d'exploitation de ce tutoriel : système Windows 10, JavaScript version 1.8.5, ordinateur Dell G3.
Signification
La même opération agit sur différents objets, ce qui peut produire des interprétations différentes et des résultats d'exécution différents
Par exemple, j'ai un chat et un chien si vous leur donnez la même commande. aboie", le chat miaule et le chien aboie, donc les laisser aboyer est la même opération, et différents aboiements entraîneront des résultats d'exécution différents.
L'implémentation en pseudo-code est la suivante :
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()); // '汪~'
Et si on veut ajouter un animal ? Ajouter un jugement supplémentaire ? Ensuite à chaque fois que je veux ajouter un son d'animal, je dois modifier getVoice ? N'est-ce pas un peu encombrant ?
Nous devons donc réfléchir à la façon de résoudre ce problème~
Polymorphisme des objets
En fait, la fonction la plus fondamentale du polymorphisme est d'éliminer ces instructions de branchement conditionnelles en convertissant les instructions conditionnelles procédurales en polymorphisme d'objet .
En termes simples, cela signifie séparer « quoi faire » de « qui le fait et comment le faire ». Un résumé abstrait signifie séparer « les choses qui ne changent pas » des « choses qui peuvent changer ».
L'exemple que nous avons donné au début peut être décomposé et compris comme ceci :
Les choses qui restent inchangées sont : les sons émis par les animaux. Les choses qui peuvent changer sont : le type de sons que font les animaux
Ensuite. on peut mettre L'action des "animaux émettant des sons" est distribuée à chaque classe (encapsulée dans chaque classe), puis l'action "d'appeler" est appelée dans la fonction getVoice qui émet le son.
L'exemple ci-dessus peut être modifié comme ceci~
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()); // '汪~'
Application pratique du polymorphisme
Le polymorphisme est largement utilisé dans les modèles de conception, tels que le modèle de combinaison/modèle de stratégie, etc. ~~
Bien que nous ne l'utilisions pas dans le développement quotidien, le polymorphisme est toujours très utile une fois que nous impliquons certains modèles de conception
Encapsulation et polymorphisme JS
En plus de l'héritage, de l'encapsulation et du polymorphisme, le polymorphisme fait également partie intégrante de la pensée orientée objet. L'encapsulation et le polymorphisme de JS sont également réalisés grâce à l'application flexible des attributs « simulation ».
L'encapsulation peut être simulée en définissant des propriétés publiques dans la classe et en les implémentant dans des sous-classes.
L'incarnation du polymorphisme est plus simple. L'implémentation directe de la fonction du même nom dans la sous-classe peut remplacer la fonction de la classe parent. Il n'y a pas de mot-clé virtualde en JS similaire à celui en C#, et toutes les fonctions de la classe parent peuvent être directement remplacées.
Exemple :
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
Comme ci-dessus, les classes sumCalc et productCalc héritent et implémentent la classe calc, et implémentent la "fonction abstraite" GetResult(). C'est ainsi que l'encapsulation JS est implémentée.
De plus, toutes les classes de JS héritent d'Object et Object a sa propre fonction toString(). Par conséquent, la fonction toString() de la classe calc ci-dessus couvre en fait la fonction originale, une manifestation du polymorphisme.
【Recommandations associées : tutoriel vidéo javascript, front-end web】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!