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.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, JavaScript-Version 1.8.5, Dell G3-Computer.
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()); // '汪~'
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()); // '汪~'
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
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!