これは(以下)で「最大呼び出しスタックサイズを超えました」というエラーが発生しました。これは、 "this.actions"オブジェクト内で "this"が解釈されているためです。そのオブジェクト内で、 "this"はそのオブジェクト、またはUnitクラスのインスタンスを参照していますか?前者が.bind(this)を "this.actions"オブジェクトの最後に置くと、 "this"はクラスインスタンスを参照するようになります。もしそうなら、なぜですか?そうでない場合は、どうしてですか?オブジェクト内の "this"の範囲
function Unit(){
this.move = function(direction){
switch(direction){
case 'up': { console.log('foo'); break; }
case 'down': { console.log('foooo'); break; }
}
console.log('bar');
}
this.shoot = function(){console.log('zap')}
this.actions = {
'moveUp' : function(){ this.move('up') },
'moveDown' : function(){ this.move('down') },
'shoot' : function(){ this.shoot() }
}
return this
}
あなたはオブジェクトのメソッドに 'move'をしてはいけません。より簡単に関数を作り、それを '' moveUp 'と呼んでください:move.call(this、' up ')}、 '' shoot'と同じ –
有望です。答えに展開しますか? – DJG