Samstag, Dezember 14, 2019

Was ist Polymorphismus in Javascript?

Ich habe einige Artikel konnte ich im internet gefunden auf Polymorphismus. Aber ich glaube, ich könnte nicht ganz begreifen die Bedeutung von it und Ihrer Bedeutung. Die meisten der Artikel nicht sagen, warum es wichtig ist und wie ich erreichen kann polymorphes Verhalten in OOP (natürlich in JavaScript).

Kann ich keine code-Beispiel, weil ich noch nicht auf die Idee gekommen ist, wie es zu implementieren, so dass meine Fragen unten:

  1. Was ist es?
  2. Warum brauchen wir es ?
  3. Wie es funktioniert?
  4. Wie kann ich erreichen, das polymorphe Verhalten in javascript?

Habe ich dieses Beispiel. Aber es ist leicht verständlich, was sein Ergebnis von diesem code. Es gibt keine klare Vorstellung über Polymorphismus selbst.

function Person(age, weight) {
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo.";
    }
}
function Employee(age, weight, salary) {
    this.salary = salary;
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo " +
        "and earns " + this.salary + " dollar.";
    }
}

Employee.prototype = new Person();
Employee.prototype.constructor = Employee;
  //The argument, 'obj', can be of any kind
  //which method, getInfo(), to be executed depend on the object
  //that 'obj' refer to.

function showInfo(obj) {
    document.write(obj.getInfo() + "<br>");
}

var person = new Person(50,90);
var employee = new Employee(43,80,50000);
showInfo(person);
showInfo(employee);

InformationsquelleAutor der Frage AL-zami | 2014-12-24

4 Kommentare

  1. 63

    Polymorphismus ist eines der Grundprinzipien der objektorientierten Programmierung (OOP). Es ist die Praxis der Gestaltung von Objekten zu teilen, Verhalten und in der Lage sein zu überschreiben, gemeinsame Verhaltensweisen, die mit spezifischen. Polymorphismus nutzt Vererbung, um dies zu verwirklichen.

    In der OOP wird alles betrachtet, modelliert werden als ein Objekt. Diese Abstraktion genommen werden kann den ganzen Weg hinunter zu a und O für ein Auto, oder so breit, wie einfach ein Auto mit einem Jahr, Marke und Modell.

    Haben eine polymorphe KFZ-Szenario würde es den base-Auto-Typ, und dann würde es Unterklassen, die Erben aus dem Auto und stellen Ihre eigenen Verhaltensweisen zusätzlich zu den grundlegenden Verhaltensweisen, die ein Auto haben würde. Zum Beispiel, eine Unterklasse könnte TowTruck, die müsste noch ein Jahr machen und Modell, sondern könnte auch einige zusätzliche Verhaltensweisen und Eigenschaften, die könnte so grundlegenden Fragen wie eine fahne für IsTowing als kompliziert, wie die Besonderheiten der Aufzug.

    Immer wieder auf das Beispiel der Menschen und Mitarbeiter, alle Mitarbeiter sind Menschen, aber alle Menschen sind keine Angestellten. Das ist zu sagen, dass die Menschen wird die super-Klasse und Mitarbeiter der sub-Klasse. Die Menschen haben die Alters-und Gewichtsangaben, aber Sie haben nicht die Gehälter. Mitarbeiter sind Menschen, so dass Sie inhärent ein Alter und Gewicht, sondern auch, weil Sie Mitarbeiter haben, haben Sie ein Gehalt.

    So, um dies zu erleichtern, werden wir die ersten schreiben aus der super-Klasse (Person)

    function Person(age,weight){
     this.age = age;
     this.weight = weight;
    }

    Und wir geben der Person die Fähigkeit zu teilen Ihre Informationen

    Person.prototype.getInfo = function(){
     return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo.";
    };

    Nächstes wollen wir eine Unterklasse von Person, Mitarbeiter

    function Employee(age,weight,salary){
     this.age = age;
     this.weight = weight;
     this.salary = salary;
    }
    Employee.prototype = new Person();

    Und wir überschreiben das Verhalten von getInfo durch die Definition eine, die passt besser zu einem Mitarbeiter

    Employee.prototype.getInfo = function(){
     return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo " +
        "and earns " + this.salary + " dollar.";  
    };

    Diese können verwendet werden, ähnlich wie Ihre original-code verwenden

    var person = new Person(50,90);
    var employee = new Employee(43,80,50000);
    
    console.log(person.getInfo());
    console.log(employee.getInfo());

    Allerdings gibt es nicht viel gewonnen mit der Vererbung hier als Angestellter Konstruktor, so ähnlich ist person, und die einzige Funktion im Prototyp wird überschrieben. Die macht im polymorph-design ist es, gemeinsam Verhaltensweisen.

    InformationsquelleAutor der Antwort Travis J

  2. 19

    Wie in diesem anderen Antwort Polymorphie andere Interpretationen.

    Die beste Erklärung zu diesem Thema, die ich je gelesen habe ist ein Artikel von Luca Cardellieinem bekannten Typ Theoretiker. Der Artikel benannt ist Auf Understanding Types, Data Abstraction, and Polymorphism.

    Was Ist es?

    Cardelli definiert verschiedene Arten von Polymorphismus in diesem Artikel:

    • Universal
      • parametric
      • Einbeziehung
    • Ad-hoc
      • oveloading
      • Zwang

    Vielleicht in JavaScript ist es ein bisschen schwieriger zu sehen, die Auswirkungen des Polymorphismus, weil die eher klassischen Arten des Polymorphismus sind deutlich in statisch typisierten Systemen, in der Erwägung, dass JavaScript hat dynamische Typisierung.

    So, zum Beispiel, gibt es keine Methode oder Funktion überladen oder automatische Typ-Zwang bei der Kompilierung in JavaScript. In einer dynamischen Sprache, die wir nehmen, die meisten dieser Dinge für selbstverständlich halten. Weder brauchen wir so etwas wie parametrische Polymorphie in JavaScript aufgrund der dynamischen Natur der Sprache.

    Dennoch hat JavaScript eine form des Typ-Vererbung, die emuliert die gleichen Vorstellungen von Subtyp-Polymorphismus (klassifiziert als inclusion-Polymorphismus durch Cardelli oben) in einer ähnlichen Weise zu dem, was wir normalerweise tun, in anderen Objekt-orientierten Programmierung-Sprachen wie Java oder C# wie bereits erwähnt in einer anderen Antwort.

    Andere form von Polymorphismus sehr typisch für dynamische Sprachen genannt wird duck typing.

    Es ist ein Irrtum zu glauben, Polymorphismus bezieht sich nur auf Objekt-orientierte Programmierung. Andere Programmiermodelle (funktional, prozedural, logic, etc.) bieten verschiedene Formen des Polymorphismus in Ihre Systeme vom Typ, wahrscheinlich ein wenig ungewohnt für diejenigen, die nur verwendet werden, um OOP.

    Warum Brauchen Wir Es?

    Polymorphismus fördern viele gute Attribute in der software, unter anderem fördert es die Modularität und Wiederverwendbarkeit und damit den Typ system flexibler und dehnbarer. Ohne Sie wäre es wirklich schwer, den Grund zu Typen. Polymorphismus stellt sicher, dass ein Typ kann ersetzt werden durch andere kompatible Modelle, vorausgesetzt, Sie erfüllen eine öffentliche Schnittstelle, so dass diese auch fördert die information hiding und Modularität.

    Wie Funktioniert es?

    Dies ist nicht einfach zu beantworten, verschiedene Sprachen haben verschiedene Möglichkeiten, es zu implementieren. Im Fall von JavaScript, wie oben erwähnt, Sie werden sehen, es materialisieren sich in form von Typ-Hierarchien mit prototypal inheritance und Sie können auch nutzen es mit duck-typing.

    Das Thema ist etwas breiter und Sie öffnete die zwei viele Fragen in einem post. Vielleicht ist es am besten, dass Sie beginnen, Lesen Cardelli Papier und dann versuchen zu verstehen, Polymorphismus unabhängig von irgendeiner Sprache oder Programmier-Paradigma, dann werden Sie beginnen, Zusammenhänge zwischen den theoretischen Konzepten und, was eine Besondere Sprache wie JavaScript zu bieten hat, bei der Umsetzung dieser Ideen.

    InformationsquelleAutor der Antwort Edwin Dalorzo

  3. 6

    was ist es?

    Poly= viele, morphismus=form oder Verhalten verschieben.

    warum brauchen wir es ?

    In der Programmierung, Es wird verwendet, wenn wir wollen, dass eine Funktion (sagen wir die Funktion X s) – Schnittstelle flexibel genug sein, zu akzeptieren, unterschiedliche Typen oder die Anzahl der Parameter. Auch, basierend auf den sich verändernden Parameter-Typen oder zahlen, vielleicht wollen wir die Funktion X sich anders Verhalten (morphismus).

    Wie es funktioniert?

    Schreiben wir mehrere Implementierungen von X-Funktion, wo jede Anwendung andere Parameter akzeptiert-Typen oder die Anzahl der Parameter. Basierend auf dem Typ oder Anzahl der parameter, die der compiler (zur Laufzeit) über die Umsetzung von X sollte ausgeführt werden, wenn X aufgerufen wird code.

    wie kann ich erreichen, das polymorphe Verhalten in javascript?

    JS ist nicht eine typisierte Sprache, so dass es wirklich nicht gemeint zu verwenden OOP-Konzepte wie Polymorphismus. Allerdings, die neuere version von JS nun Klassen und die Möglichkeit besteht, dass polymosphism könnte start making sense in JS auch. Andere Antworten stellen einige interessante Lösungen.

    InformationsquelleAutor der Antwort hadaytullah

  4. 2

    JavaScript ist eine interpretierte Sprache, nicht eine kompilierte Sprache.

    Compile-Zeit Polymorhism( oder Statischer Polymorphismus) Compile-Zeit-Polymorphismus ist nichts anderes als das überladen von Methoden in java,c++

    Also die Methode überladen ist nicht möglich, in javascript.

    Aber Dynamische (Laufzeit) Polymorphismus ist die Vielgestaltigkeit existiert zur Laufzeit
    so Methode überschreiben ist möglich in javascript

    weiteres Beispiel ist PHP.

    InformationsquelleAutor der Antwort Apoorv

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...