2012-01-07 4 views
0

jsプロトタイプから継承しようとするといくつか問題があります。 問題は、サブクラスでは、マスターから派生した場合、マスターからのinitXメソッドは "this"を介したメソッドとして知られていません。 FirbugでJSのプロトタイプ:まだ派生していない親メソッドへのアクセス

function master() {}; 
function sub() {}; 

master.prototype = { 
    init: function() { 
     console.log('Master Init!'); 
     this.initX();     // This is where the error is thrown 
    }, 
    initX: function() { 
     console.log('Master InitX'); 
    } 
}; 

sub.prototype = new master(); 
sub.prototype.constructor = sub; 
sub.parent = master.prototype; 

sub.prototype.init = function() { 
    sub.parent.init.call(); 
    console.log('Sub Init'); 
} 

var subby = new sub(); 
subby.init(); 

エラーメッセージがされていますので、基本的には母のinitが呼び出されますが、それは母のinitであるためthis.initXのエラーがスローされます

TypeError: this.initX is not a function 

誰でも任意のアイデア?

答えて

1

実際にはthisの値を渡すことはないので、windowinitに等しくなります。 window.initXは存在しません。

.call()、そのままでは全く役に立たない - 代わりに以下を使用します。

sub.parent.init.call(this); // set `this` inside `init`, so that 
          // you'll be calling `initX` on the instance 

あなたは、同様の引数を通じて沿って、すべてを渡すの一般的な方法を渡したい場合はargumentsと組み合わせる.apply次のとおりです。

sub.parent.init.apply(this, arguments); 
+0

ありがとう!それはうまくいった! –

関連する問題