1

これは、ブラウザで使用することを目的としています。

function keyboardJS () {
    this.keys = {};
    this.tempASCIIkey;
    this.tempCHARkey;
}
keyboardJS.prototype = {
    keyIsUp : function (evt) {
      console.log(this);
      this.ASCIIkey = evt.keyCode;
      this.CHARkey = String.fromCharCode(this.ASCIIkey);
      this.keys[this.CHARkey] = false;
      console.log(this.CHARkey + " is now " + this.keys[this.CHARkey]);
    },
    keyIsDown : function (evt) {
      console.log(this);
      this.ASCIIkey = evt.keyCode;
      this.CHARkey = String.fromCharCode(this.ASCIIkey);
      this.keys[this.CHARkey] = true;
      console.log(this.CHARkey + " is now " + this.keys[this.CHARkey]);
    },
    init : function () {
      document.addEventListener("keydown", this.keyIsDown);
      document.addEventListener("keyup", this.keyIsUp);
    }
}

var game = {};

game.myKeyboard = new keyboardJS();
game.myKeyboard.init();

ただし、(console.log(this);)は「#document」を返します。プロトタイプ関数内でオブジェクトのプロパティを参照するにはどうすればよいですか?

4

1 に答える 1

1

これを試して...

init : function () {
  document.addEventListener("keydown", this.keyIsDown.bind(this));
  document.addEventListener("keyup", this.keyIsUp.bind(this));
}

this関数への参照を渡すときに、は魔法のようにバインドされていません。このコンテキストではaddEventListener()thisは、それが意図されているものです。

bind()これは、お気に入りの古いIEではサポートされていないことに注意してください。

それをシムしたり、プロトタイプで関数を呼び出す関数を渡したり、同等のバインドを持つライブラリを使用したりできます(_.bind()アンダースコア、$.proxy()jQueryなど)。

于 2012-05-23T12:14:50.423 に答える