1

プレイヤーというオブジェクトがあります

function Player(_x, _y, _speed) {
    this.x = _x;

    this.getX = function() {
        return this.x;
    };

    this.handleKeyDown = function(event) {
        console.log(this.x); // undefined
    };

    $(document.body).keydown(this.handleKeyDown);
}

「handleKeyDown」が x プロパティを認識しないのはなぜですか? どうすれば回避できますか?

4

5 に答える 5

0

keydownthisハンドラーの は要素自体 (この場合はdocument.body) であるためです。どちらかにする必要があります

var self = this;
$(document.body).keydown(function() { self.handleKeyDown() });

bindまたは、またはを使用して見てください$.proxy

于 2013-07-14T15:35:01.933 に答える
0

これthisは「document.body」であり、オブジェクトではありませんPlayer

于 2013-07-14T16:15:57.637 に答える
-1

thisgetX 関数を表すので、これを試してください:

function Player(_x, _y, _speed) {
    var self = this;
    self.x = _x;

    self.getX = function() {
        return self.x;
    };

    self.handleKeyDown = function(event) {
        console.log(self.x);
    };

    $(document.body).keydown(self.handleKeyDown);
}

編集:まあ、私は速く読んだ、私はhandleKeyDownを意味しました。とにかく、問題はthis変化のコンテキストであるため、selfフィールドに格納してコードを明確にし、自分の考えを参照していることを確認することをお勧めします。

于 2013-07-14T15:35:42.130 に答える