2013-07-25 3 views
6

In dem folgenden Stück Code, wie kann ich auf die A.prototype.log innerhalb von B.prototype.log zugreifen?Überschreiben ererbte Prototyp-Methode und Aufruf der ursprünglichen innerhalb der neuen

function A() {} 

A.prototype.log = function() { 
    console.log("A"); 
}; 

function B() {} 

B.prototype = Object.create(A.prototype); 
B.prototype.constructor = B; 

B.prototype.log = function() { 
    //call A.prototype.log here 
    console.log("B"); 
}; 

var b = new B(); 
b.log(); 

Ich weiß, ich könnte A.prototype.log.call(this) nur schreiben, aber ich dachte, vielleicht gibt es eine elegantere Möglichkeit ist, dass es mich in einer relativen Art und Weise, wie „rufen Sie die Methode‚log‘der nächsthöheren Instanz in dem Aufruf lässt Prototypkette ". Ist so etwas möglich?

+1

eigentlich, 'A.prototype.log.call (this)' war genau das, was ich suchte. Vielen Dank! – ProblemsOfSumit

Antwort

5

könnten Sie verwenden Object.getPrototypeOf

... 
B.prototype.log = function() { 
    Object.getPrototypeOf (B.prototype).log.call(this) 
    console.log("B"); 
}; 
... 
b.log(); //A B 

Hinweis: Object.getPrototypeOf ECMASript 5, finden Sie in der compatibility


Es gibt auch die Nicht-Standard- und veraltete __proto__ Eigenschaft (compatibility) welche

verweist auf das gleiche Objekt als interne [[Prototyp]]

und Ihnen erlauben würde, Ihre A s'Log-Methode wie folgt

B.prototype.__proto__.log.call(this)

Aber

nennen

Die bevorzugte Methode ist die Verwendung von Object.getPrototypeOf.

+0

+1 Das ist definitiv ein Weg, ja! Vielen Dank! – basilikum

+0

@basilikum Du bist willkommen =) – C5H8NNaO4

+0

@ C5H8NNaO4 Es gibt einen Typ im Code, der richtige ist 'Object.getPrototypeOf (B.prototype.log) .call (this)' – loretoparisi

Verwandte Themen