Heim > Web-Frontend > Front-End-Fragen und Antworten > Gibt es Polymorphismus in Javascript?

Gibt es Polymorphismus in Javascript?

WBOY
Freigeben: 2022-07-01 16:06:27
Original
1934 Leute haben es durchsucht

Polymorphismus in JavaScript bedeutet, dass dieselbe Operation unterschiedliche Interpretationen und Ausführungsergebnisse erzeugen kann, wenn sie auf verschiedene Objekte angewendet wird. Polymorphismus in JavaScript spiegelt sich in Unterklassen wider und kann durch die direkte Implementierung der gleichnamigen Funktion überschrieben werden. Funktionen der übergeordneten Klasse in JavaScript können direkt überschrieben werden.

Gibt es Polymorphismus in Javascript?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Polymorphismus in JavaScript

Bedeutung

Die gleiche Operation wirkt auf verschiedene Objekte, was zu unterschiedlichen Interpretationen und unterschiedlichen Ausführungsergebnissen führen kann

Zum Beispiel habe ich eine Katze und einen Hund, wenn Sie ihnen den gleichen Befehl geben. „bellen“ wird die Katze miauen und der Hund bellen, daher ist es der gleiche Vorgang, sie bellen zu lassen, und unterschiedliches Bellen führt zu unterschiedlichen Ausführungsergebnissen.

Die Implementierung mithilfe von Pseudocode sieht folgendermaßen aus:

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()); // '汪~'
Nach dem Login kopieren

Was ist, wenn wir ein Tier hinzufügen möchten? Noch ein Urteil hinzufügen? Dann muss ich jedes Mal, wenn ich einen Tierton hinzufügen möchte, getVoice ändern? Ist das nicht etwas umständlich?

Also müssen wir darüber nachdenken, wie wir dieses Problem lösen können~

Polymorphismus von Objekten

Tatsächlich besteht die grundlegendste Funktion des Polymorphismus darin, diese bedingten Verzweigungsanweisungen zu eliminieren, indem prozedurale bedingte Anweisungen in Objektpolymorphismus umgewandelt werden.

Für den Laien bedeutet es, „was zu tun ist“ von „wer es tut und wie es zu tun ist“ zu trennen. Eine abstrakte Zusammenfassung bedeutet, „Dinge, die sich nicht ändern“ von „Dingen, die sich ändern können“ zu trennen.

Das Beispiel, das wir am Anfang gegeben haben, kann wie folgt aufgeschlüsselt und verstanden werden:

Die Dinge, die unverändert bleiben, sind: die von Tieren erzeugten Geräusche. Die Dinge, die sich ändern können, sind: welche Art von Geräuschen die Tiere machen

Dann Wir können sagen: Die Aktion „Tiere machen Geräusche“ wird an jede Klasse verteilt (in jede Klasse gekapselt), und dann wird die Aktion „Anrufen“ in der getVoice-Funktion aufgerufen, die den Ton erzeugt.

Das obige Beispiel kann wie folgt modifiziert werden~

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()); // '汪~'
Nach dem Login kopieren

Praktische Anwendung von Polymorphismus

Polymorphismus wird häufig in Entwurfsmustern wie Kombinationsmustern/Strategiemustern usw. verwendet. ~~

Obwohl wir es in der täglichen Entwicklung nicht verwenden, ist Polymorphismus immer noch sehr nützlich, sobald wir einige Entwurfsmuster einbeziehen

JS-Kapselung und Polymorphismus

Neben Vererbung, Kapselung und Polymorphismus ist auch Polymorphismus ein wesentlicher Bestandteil des objektorientierten Denkens. Die Kapselung und Polymorphie von JS werden auch durch die flexible Anwendung des Attributs „Simulation“ realisiert.

Die Kapselung kann simuliert werden, indem öffentliche Eigenschaften in der Klasse festgelegt und in Unterklassen implementiert werden.

Die Verkörperung des Polymorphismus ist einfacher. Die direkte Implementierung der gleichnamigen Funktion in der Unterklasse kann die Funktion der übergeordneten Klasse überschreiben. In JS gibt es kein Schlüsselwort „virtualde“, das dem in C# ähnelt, und alle übergeordneten Klassenfunktionen können direkt überschrieben werden.

Beispiel:

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
Nach dem Login kopieren

Wie oben erben und implementieren sowohl die sumCalc-Klasse als auch die productCalc-Klasse die calc-Klasse und implementieren die „abstrakte Funktion“ GetResult(). So wird die JS-Kapselung implementiert.

Darüber hinaus erben alle Klassen in JS von Object und Object verfügt über eine eigene toString()-Funktion. Daher deckt die toString()-Funktion der obigen Calc-Klasse tatsächlich die ursprüngliche Funktion ab – eine Manifestation des Polymorphismus.

【Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend

Das obige ist der detaillierte Inhalt vonGibt es Polymorphismus in Javascript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage