2013-07-25 12 views
6

A.prototype.logB.prototype.logにアクセスするにはどうすればよいですか?私は「メソッドを呼び出すの次に高いのインスタンスの 『ログ』のように、私はちょうどA.prototype.log.call(this)を書くことができますが、私は多分、私は相対的な方法でそれを呼び出すことができ、よりエレガントな方法があると思っ知っ継承されたプロトタイプメソッドをオーバーライドし、元のプロトタイプメソッドをオーバーライドします

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

プロトタイプチェーン "。このようなことは可能でしょうか?

+1

実際には、「A.prototype.log.call(this)」はまさに私が検索したものでした。ありがとうございました! – ProblemsOfSumit

答えて

5

あなたはObject.getPrototypeOf

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

注意を使用することができます。Object.getPrototypeOfがECMASript 5である、(また非標準ありcompatibility


を参照して__proto__財産を非推奨compatibility

は、その内部と同じオブジェクトを参照[[プロトタイプ]]

、あなたはこの

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

しかし

のようなあなたの A s'のログメソッドを呼び出すことができるようになります

好ましい方法は、Object.getPrototypeOfを使用することです。

+0

+1これは確かに方法です、はい!ありがとう! – basilikum

+0

@basilikumあなたは歓迎です)= – C5H8NNaO4

+0

@ C5H8NNaO4コードに型があります。正しいものは 'Object.getPrototypeOf(B.prototype.log).call(this)'です。 – loretoparisi

関連する問題