2013-07-25 17 views
6

Nella seguente parte di codice, come posso accedere allo A.prototype.log all'interno di B.prototype.log?Ignora il metodo prototipo ereditato e chiama quello originale all'interno di quello nuovo

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(); 

So che potrei solo scrivere A.prototype.log.call(this) ma ho pensato che forse c'è un modo più elegante, che mi permette di chiamare in modo relativo, come "chiamare il metodo 'log' della successiva istanza superiore nel catena prototipo ". È possibile qualcosa del genere?

+1

in realtà, 'A.prototype.log.call (this)' era esattamente quello che ho cercato. Grazie! – ProblemsOfSumit

risposta

5

Si potrebbe utilizzare Object.getPrototypeOf

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

Nota: Object.getPrototypeOf è ECMASript 5, vedere la compatibility


C'è anche la non standard e deprecato __proto__ immobili (compatibility) che

fa riferimento lo stesso oggetto come il suo interno [[Prototype]]

e permetterebbe di chiamare il metodo log tuoi A s'Ti piace questa

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

Ma

il metodo preferito è utilizzare Object.getPrototypeOf.

+0

+1 Questo è sicuramente un modo, si! Grazie! – basilikum

+0

@basilikum Prego =) – C5H8NNaO4

+0

@ C5H8NNaO4 c'è un tipo nel codice, quello corretto è 'Object.getPrototypeOf (B.prototype.log) .call (this)' – loretoparisi