2

ここで最初の質問。

Javascriptオブジェクトを試しています。これが私のコードです:

function main(){
    document.onkeydown = hero.keyListener;
    hero.move();
    hero.counter(); 
}
var hero = {
    dx: undefined,
    dy: undefined,
    keyListener: function (e) {
        this.dy = 100;
    },  
    move: function () {
        this.dx = 80;
    },
    counter: function() {
        document.getElementById("dxcounter").innerHTML = "Dx: "+ this.dx + " Dy: "+ this.dy;
    }   
};

moveメソッドは更新されますが、キーが押されてthis.dxもkeyListenerは更新されません。this.dy

keyListenerを次のように変更すると機能します。

keyListener: function (e) {
    that = hero;
    that.dy = 100;
},

なぜmoveメソッドthisはkeyListenerに対しては機能するが、機能しないのですか?

4

2 に答える 2

2

JavaScriptでは、thisデフォルトではオブジェクトに関連付けられていません。コンテキストによって設定されます。この場合、thisになりますdocumentthisこれを修正する1つの方法は、常に次のようになるように関数をバインドすることheroです。

document.onkeydown = hero.keyListener.bind(hero);

注:bind最近のブラウザでのみ使用できます。

于 2012-05-19T02:34:50.003 に答える
1

JavaScriptのthis演算子は、期待するスコープ規則に常に従うとは限りません。

この記事は、何が起こっているのかを説明するのに役立ちます:http: //unschooled.org/2012/03/understanding-javascript-this/

于 2012-05-19T02:35:51.003 に答える