Maison > interface Web > Questions et réponses frontales > Y a-t-il du polymorphisme en javascript ?

Y a-t-il du polymorphisme en javascript ?

WBOY
Libérer: 2022-07-01 16:06:27
original
1934 Les gens l'ont consulté

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.

Y a-t-il du polymorphisme en javascript ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, JavaScript version 1.8.5, ordinateur Dell G3.

Polymorphisme en JavaScript

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()); // '汪~'
Copier après la connexion

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()); // '汪~'
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal