Heim >Web-Frontend >js-Tutorial >JS-Simulationsmethode zur Implementierung der Kapselung
Dieses Mal werde ich Ihnen die Methode der JS-Simulation zur Implementierung der Kapselung vorstellen. Was sind die Vorsichtsmaßnahmen für die JS-Simulation zur Implementierung der Kapselung?
Vorwort
Bei der Vererbung wird eine Unterklasse verwendet, um eine andere übergeordnete Klasse zu erben. Anschließend kann die Unterklasse automatisch alle Attribute und Methoden in der übergeordneten Klasse haben. Dieser Vorgang wird als Vererbung bezeichnet! Es gibt viele Möglichkeiten, Vererbung in JS zu implementieren. Heute werde ich Ihnen drei davon vorstellen.
1. Fügen Sie eine Erweiterungsmethode
für die//声明一个父类 function Person(name){ this.name=name; this.age=age; this.say=function(){ alert("我叫"+this.name); } } //声明一个子类 function Student(){ this.no=no; this.study=function(){ alert("我在学习!"); } } // 通过循坏,将父类对象的所有属性和方法,全部赋给子类对象 Object.prototype.extend=function(parent){ for(var i in parent){ this[i].parent[i]; } } var p=new Person("张三",12); var s=new Student("1234567"); //子类对象调用这个扩展方法 s.extend() console.log(s);Objektklasse
hinzu Die oben genannten Grundsätze für die Umsetzung der Vererbung:
Durch die Schleife werden alle Attribute und Methoden des übergeordneten Klassenobjekts dem untergeordneten Klassenobjekt zugewiesen. Der entscheidende Punkt ist die for-in-Schleife. Auch ohne Objekterweiterung kann die Operation durch eine einfache Schleife implementiert werden.
Aber es gibt einige Nachteile, die Vererbung auf diese Weise umzusetzen:
① Sie können das vollständige Unterklassenobjekt nicht direkt durch eine Instanziierung erhalten. Sie müssen zuerst das übergeordnete Klassenobjekt und das untergeordnete Klassenobjekt abrufen und sie dann manuell zusammenführen
②Die Vererbungsmethode, die Object erweitert, bleibt auch für das Objekt der Unterklasse erhalten.
Werfen wir einen Blick auf die zweite Methode zur Implementierung der Vererbung~
2. Verwenden Sie die prototypische Vererbung
Bevor wir diese Methode vorstellen, sprechen wir über zwei Konzepte: Prototypobjekt und Prototyp
1. Prototyp: das Prototypobjekt der Funktion
①Nur Funktionen haben Prototypen, und alle Funktionen müssen Prototypen haben
②Der Prototyp selbst ist auch ein Objekt!
③Der Prototyp zeigt auf die Referenzadresse, an der sich die aktuelle Funktion befindet!
2. Proto: Der Prototyp des Objekts!
①Nur Objekte haben Proto, und alle Objekte müssen Proto haben
② Proto ist auch ein Objekt, daher hat es auch ein eigenes Proto. Die Reihenfolge, in der entlang dieser Linie nachgeschlagen wird, ist die Prototypenkette.
③ Funktionen und Arrays sind beide Objekte und haben ihr eigenes Proto
//声明父类 function Person(name,age){ this.name=name; this.age=age; this.say=function(){ alert("我叫"+this.name); } } //声明子类 function Student(no){ this.no=no; this.study=function(){ alert("我在学习!我叫"+this.name+"今年"+this.age"); } } //将父类对象赋给子类的prototype Student.prototype=new Person("张三",14); //拿到子类对象时,就会将父类对象的所有属性和方法,添加到proto var s=new Student(); s.study();
Das Prinzip der Verwendung der prototypischen Vererbung:
Weisen Sie das übergeordnete Klassenobjekt dem Prototyp der Unterklasse zu. Anschließend werden die Attribute und Methoden des übergeordneten Klassenobjekts im Prototyp der Unterklasse angezeigt. Wenn eine Unterklasse instanziiert wird, befindet sich der Prototyp der Unterklasse im Proto des Unterklassenobjekts. Schließlich werden die Attribute und Methoden des übergeordneten Klassenobjekts im Proto des Unterklassenobjekts angezeigt.
Merkmale dieser Vererbung:
① Alle Attribute der Unterklasse selbst sind Mitgliedsattribute, und von der übergeordneten Klasse geerbte Attribute sind Prototypattribute.
② Das fertige Unterklassenobjekt kann immer noch nicht durch eine einstufige Instanziierung abgerufen werden.
Der dritte Weg zur Umsetzung der Vererbung:
call(), apply() und bind(), diese drei Methoden sind sehr ähnlich und unterscheiden sich nur in der Übergabe von Parametern.
function Person(name,age){ this.name=name; this.age=age; this.say=function(){ alert("我叫"+this.name); } } function Student(no,name,age){ this.no=no; this.study=function(){ alert("我在学习!"); } //将父类函数的this,指向为子类函数的this Person.call(this,name,age); } var s=new Student(12,"张三",24); console.log(s);
Der einzige Unterschied zwischen den drei Funktionen besteht in der Art und Weise, wie sie die Parameterliste von func akzeptieren. Ansonsten gibt es keinen Unterschied in der Funktionalität!
So schreiben Sie die drei Funktionen (Unterschiede):
Aufrufschreibmethode: func.call (obj, auf das func zeigt, func-Parameter 1, func-Parameter 2,...);
Schreibmethode anwenden: func.apply(obj, auf das hiervon verwiesen wird, [func-Parameter 1, func-Parameter 2,...]);
So schreiben Sie bind: func.bind(obj, auf das dies von func zeigt)(func-Parameter 1, func-Parameter 2,...);
Ich glaube, Sie haben die Methode gemeistert, nachdem Sie den Fall hier gelesen haben Artikel. Bitte achten Sie auf weitere spannende Artikel auf der chinesischen PHP-Website!
Empfohlene Lektüre:
Das obige ist der detaillierte Inhalt vonJS-Simulationsmethode zur Implementierung der Kapselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!