0

Javascript にはクラスがないことはわかっています。便宜上、コンストラクター関数をクラスと呼んでいます。

InputHandlerJavascriptで呼ばれるクラスを作っています。というメソッドがあり、onMouseDown次のようにイベント ハンドラーとして登録します。

Irenic.InputHandler.prototype.attach = function()
{
    var inputHandler = this; //Get the instance of InputHandler

    document.addEventListener("keydown", inputHandler.onKeyDown, false); //Concentrate on this, but the question applies to all of these.
    document.addEventListener("keyup", inputHandler.onKeyUp, false);
    document.addEventListener("mousemove", inputHandler.onMouseMove, false);
    document.addEventListener("mouseup", inputHandler.onMouseUp, false);
    document.addEventListener("mousedown", inputHandler.onMouseDown, false);
}

(Irenicは私が構築しているエンジンの名前であり、これらすべてのクラスを持つグローバル オブジェクトでもあります。)

メソッドは次のinputHandler.onMouseDownようになります。

Irenic.InputHandler.prototype.onMouseDown = function(event) { var inputHandler = this; //悲しいことに、これはドキュメントを参照しており、InputHandler のインスタンスではありません

console.log(inputHandler); //Logs #document

if (event.button == 0)
{
    inputHandler.mouse.lmb = true;
}

if (event.button == 1)
{
    inputHandler.mouse.wheel = true;
}

if (event.button == 2)
{
    inputHandler.mouse.rmb = true;
}

}

コメントで述べたように、thisキーワードはイベントが発生した要素を参照します。私は明らかにそれを望んでいませInputLoader

4

3 に答える 3

6

Function.prototype.bind関数のコンテキストをロックするために使用します。

inputHandler.onKeyDown.bind(inputHandler)

PS。switch、または少なくとも複数の構成else ifの代わりに使用します。ifそれらのうちの 1 つだけが true になります。

于 2012-07-01T19:48:20.403 に答える
5

コンストラクターで、インスタンスのメソッドをそのインスタンスにバインドします。

function InputHandler() {
    this.onKeyDown = this.onKeyDown.bind(this);
    this.onKeyUp = this.onKeyUp.bind(this);
    this.onMouseMove = this.onMouseMove.bind(this);
    this.onMouseUp = this.onMouseUp.bind(this);
    this.onMouseDown = this.onMouseDown.bind(this);
}

このようにして、インスタンスは構築されるとすぐに使用できるようになります。

見るFunction#bind

于 2012-07-01T19:49:43.273 に答える
1

バインドはIE<=8では機能しないと思います。したがって、これが必要な場合、これは機能するはずです。

document.addEventListener("keydown", function (ev) { return inputHandler.onKeyDown(ev); }, false)
于 2012-07-01T19:55:43.243 に答える