Objekterstellung:
Wenn ein Funktionsobjekt erstellt wird, führt das vom Funktionskonstruktor generierte Funktionsobjekt einen ähnlichen Code aus:
this.prototype={constructor:this};
Angenommen, wenn die Funktion F
F ein Objekt mit einer neuen Methode erstellt, wird der Konstruktor des Objekts auf diesen F.prototype.constructor gesetzt.
Wenn die Funktion den Prototyp der Funktion vor dem Erstellen des Objekts ändert, hat dies Auswirkungen das Konstruktorattribut des erstellten Objekts
Zum Beispiel:
function F(){};
F.prototype={constructor:'1111'};
var o=new F( );//o.constructor== ='1111' true
Prinzip der Vererbung:
Vererbung in JavaScript ist ein Mechanismus, der die Prototypenkette verwendet. Jede Instanz einer Funktion teilt die Daten Definiert im Prototypattribut des Konstruktors. Wenn eine Klasse eine andere erbt, muss sie die übergeordnete Funktionsinstanz dem Prototypattribut der untergeordneten Funktion zuweisen. Und jedes Mal, wenn ein neues Instanzobjekt erstellt wird, wird die private Eigenschaft __proto__ des Objekts automatisch mit dem Prototyp des Konstruktors verbunden.
instanceof dient zum Nachschlagen der privaten Prototyp-Attributkette des Instanzobjekts, um festzustellen, ob es sich um eine Instanz des angegebenen Objekts handelt
Spezifisches Beispiel:
//instanceof implementiert
function Myinstanceof(obj ,type)
{
var proto=obj.__proto__;
while(proto)
{
if(proto ===type.prototype)break;
proto=proto. __proto__;
}
return proto!=null;
}
function View(){}
function TreeView(){}
TreeView.prototype= new View();//TreeView.prototype.__proto__=TreeView.prototype automatische Vervollständigung
TreeView.prototype.constructor=TreeView;//Korrekturkonstruktor
var view=new TreeView() ;//view.__proto__= TreeView.prototype vervollständigt automatisch
alert(view instanceof View); //true wird gefunden, wenn view.__proto__.__proto__ gefunden wird
alert(view instanceof TreeView); //true wird gefunden wenn view.__proto__ gefunden wird
alert(Myinstanceof(view,View)); //true
alert(Myinstanceof(view,TreeView)); //true
Das oben genannte angepasste Myinstanceof ist eine Funktion von instanceof Von mir selbst implementierte Funktion. Da der IE-Kernel-Instanzspeicher-Prototyp kein __proto__ ist, sollte Myinstanceof bei anderen Browsern kein Problem darstellen