In der Gesellschaft gibt es bei der Beurteilung der Fähigkeiten und des Wertes einer Person oft zwei unterschiedliche Kriterien: eines ist „basierend auf Beziehungen“ und das andere ist „basierend auf Fähigkeiten“. Beide Standards sind in unterschiedlichen Kulturen, Branchen und persönlichen Werten verkörpert, jeder mit seinen eigenen Befürwortern und Kritikern.
Innerhalb von Programmiersprachen gibt es zwei Arten von Standards, die Code auf unterschiedliche Weise organisieren und Datenstrukturen mit Funktionen verknüpfen. In diesem Artikel wird kurz auf die Anwendung und das Wirkprinzip dieser beiden gemeinsamen Standards eingegangen.
In der Javascript-Sprache wird das Schlüsselwort class bereitgestellt, mit dem wir Klassen definieren können. Wichtig ist, dass Klassen erweiterbar sind und wenn Methoden für eine Instanz aufgerufen werden, suchen sie nach Methodendefinitionen in der Reihenfolge der Prototypenkette. Zum Beispiel:
class Animal { move() { return 'move' } } class Monkey extends Animal { jump() { return 'jump' } } class Human extends Monkey { write() { return 'write' } }
Extends-Schlüsselwörter können uns dabei helfen, eine neue Klasse zu definieren, die andere Klassen erweitert. Wir können die Prototypenkette so erhalten:
let me = new Human() let proto = me.__proto__ let r = [] while (proto !== null) { r.push(proto.constructor.name) proto = proto.__proto__ }
Wir erhalten Folgendes: ['Mensch', 'Affe', 'Tier', 'Objekt']. Wenn wir eine Methode aufrufen, hängt der Erfolg des Methodenaufrufs davon ab, ob in der Prototypenkette eine entsprechende Definition vorhanden ist. Wenn Sie beispielsweise me.move() aufrufen, hat es eine Definition in der Animal-Klasse und der Aufruf ist erfolgreich.
Dies ist das Klassenmodell, das ich gerne als „relationales“ Modell bezeichne, das aufgerufen werden kann, solange es in der Klasse der Instanz selbst oder in der übergeordneten Klasse, Großelternklasse usw. definiert ist am.
Im Vergleich zum beziehungsbasierten Modell ist das kompetenzbasierte Modell viel einfacher. Solange eine Instanz ein bestimmtes Merkmal erfüllt, kann die entsprechende Methode unabhängig von der Beziehung der Instanz auf die Instanz einwirken.
let me = { moveable: true, freezable: false } function move(x) { return x.moveable ? 'move' : undefined } function freeze(x) { return x.freezable ? 'freeze' : undefined }
In diesem Modell sind Daten und Methoden unabhängig voneinander. Der Vorteil besteht darin, dass es prägnant und unkompliziert ist, aber der Nachteil liegt auf der Hand, da die Methode und die Daten unabhängig sind und es schwierig ist, die Methodendefinition zu überschreiben.
Nachdem wir die beiden Möglichkeiten zum Verbinden von Datenstrukturen und Methoden vorgestellt haben, können wir davon ausgehen, dass die Verwendung des relationalen Klassenmodells empfohlen wird, wenn Methoden mit unterschiedlichen Funktionen mit demselben Namen entsprechend der Datenklasse implementiert werden müssen . Wenn die Methode normalerweise relativ fest ist und die Daten veränderbar sind und dieselbe Methode mit unterschiedlichen Daten funktioniert, kann das kompetenzbasierte Modell verwendet werden.
Das obige ist der detaillierte Inhalt vonBeziehung oder Fähigkeit, beide Kriterien werden herangezogen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!