-Code von MDN bekommen:JavaScript Erbe mit .call (dieser)
function Employee() {
this.name = "";
this.dept = "general";
}
function Manager() {
Employee.call(this);
this.reports = [];
}
Manager.prototype = Object.create(Employee.prototype);
function WorkerBee() {
Employee.call(this);
this.projects = [];
}
WorkerBee.prototype = Object.create(Employee.prototype);
var x = new WorkerBee();
console.log(x);
Ausgang: WorkerBee {name: "", dept: "general", projects: Array[0]}
Welche Wirkung hat Employee.call(this);
haben? Ich weiß aus dem Ausführen des Codes, dass die Vererbung erfolgreich sein muss. Die Dokumentation für .call()
einfach feststellen,
Methode ruft eine Funktion mit einem diesem Wert gegeben und individuell vorgesehen Argumente.
OK, so dass es den Konstruktor ruft Employee()
aber es gibt keine new
Operator verwendet wird und keine return
, die das Objekt zurückkommen würde und es ist Eigenschaften. Wie bewirkt Employee.call(this)
, dass das untergeordnete Objekt die übergeordneten Eigenschaften erbt?
Wenn diese Zeile weggelassen wird, ist nur das projects
Array als Eigenschaft vorhanden.
Diese Frage läuft im Grunde darauf ab, "was' 'call' tun". [MDN-Dokumentation] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call). –
Aufruf eines Konstruktors für ein Objekt setzt in-Konstruktor definierte eigene Eigenschaften für das Objekt. – dandavis
* "Wie bewirkt Employee.call (this), dass das untergeordnete Objekt die übergeordneten Eigenschaften erbt?" * Es erbt nichts. * "Wenn diese Zeile weggelassen wird, ist nur das Projects-Array als Eigenschaft vorhanden." * Und was macht "Employee"? Er weist '' '' 'name' und' deps' zu. Daraus können wir schließen, dass "Employee.call (this)" 'Employee' aufruft und" this "auf das neue Objekt setzt. Vielleicht hilft das, '.call' besser zu verstehen:' function foo() {console.log (this.name); }; foo.call ({Name: 'abc'}); foo.call ({Name: 'xyz'}); '. –