2017-06-27 3 views
1

Mein Code wie folgt aus:Javascript - Objekt der vererbten Klasse können alle die Eigenschaften des übergeordneten Zugriff und Methoden

function Person(firstName) { 
    "use strict"; 
    this.firstName = firstName; 
    this.fullName = "ABC"; 
    this.greeting = function (name) { 
     console.log("Hi " + name); 
    }; 
} 

Person.prototype.hello = function() { 
    "use strict"; 
    console.log("Hello"); 
}; 

function Car(model, year) { 
    "use strict"; 
    this.model = model; 
    this.year = year; 
} 

Car.prototype = new Person(); 
var mercedes = new Car("CS300", 2017); 
mercedes.greeting("mer"); 
console.log(mercedes.fullName); 

Warum kann das Objekt Mercedes Zugang Eigentum fullname und die Methode Gruß() auch wenn ich sie direkt im Konstruktor deklariere Person aus Person.Prototyp?

Antwort

3

Dies passiert, weil der Prototyp der Car es die Person Funktion verwendet. Also, wenn ein Schlüssel nicht auf der mercedes JavaScript-Engine gefunden wird, was die Prototyp-Kette nachschlagen.

Sie können auf das Prototypobjekt als mercedes.__proto__ zugreifen, um dies zu überprüfen. Überprüfen Sie das folgende Snippet.

function Person(firstName) { 
 
"use strict"; 
 
this.firstName = firstName; 
 
this.fullName = "ABC"; 
 
this.greeting = function (name) { 
 
    console.log("Hi " + name); 
 
    }; 
 
} 
 

 
Person.prototype.hello = function() { 
 
    "use strict"; 
 
    console.log("Hello"); 
 
}; 
 

 
function Car(model, year) { 
 
    "use strict"; 
 
    this.model = model; 
 
    this.year = year; 
 
} 
 

 
Car.prototype = new Person(); 
 
var mercedes = new Car("CS300", 2017); 
 

 
console.log(mercedes.__proto__);

Generell, wenn das JavaScript-Engine Sie am proto des Objekts suchen den Schlüssel nicht finden, dann geht es in den Proto des Proto nach oben, um um dort den Schlüssel zu finden. Dies geschieht, bis wir entweder den Schlüssel gefunden haben oder die Null erreicht haben (das Ende jeder Prototypkette). Wenn wir null erreichen, erhalten wir die Nachricht, dass der Schlüssel, nach dem wir suchen, undefined ist, da er nirgendwo in der Prototypkette gefunden wurde. Betrachten wir zum Beispiel den Wert des Schlüssels foo für Mercedes.

function Person(firstName) { 
 
"use strict"; 
 
this.firstName = firstName; 
 
this.fullName = "ABC"; 
 
this.greeting = function (name) { 
 
    console.log("Hi " + name); 
 
    }; 
 
} 
 

 
Person.prototype.hello = function() { 
 
    "use strict"; 
 
    console.log("Hello"); 
 
}; 
 

 
function Car(model, year) { 
 
    "use strict"; 
 
    this.model = model; 
 
    this.year = year; 
 
} 
 

 
Car.prototype = new Person(); 
 
var mercedes = new Car("CS300", 2017); 
 

 
console.log(mercedes.foo);

Wie Sie jetzt bemerken undefined auf der Konsole gedruckt wird.

Dies wird prototypal inheritance genannt und es ist der Mechanismus, durch den Vererbung in JavaScript implementiert wird.

+0

Jetzt verstehen, danke – Sarmad

+0

@Sarmad Sie sind herzlich willkommen! Ich bin froh, dass ich geholfen habe. – Christos

0

Prototypische Vererbung. Mercedes = Auto = Person. Wenn Sie eine Methode aufrufen, durchsucht javascript das aktuelle Objekt nach dieser Methode. Wenn es nicht gefunden wird, wird es in der Baumstruktur angezeigt, bis es ausgeführt wird oder nicht. In Ihrem Fall findet es es auf Person.

+0

danke, ich verstehe jetzt, wie die Vererbung funktioniert – Sarmad

Verwandte Themen