【发布时间】:2012-07-01 19:45:35
【问题描述】:
我知道 Javascript 中没有类,为了方便,我将构造函数称为类。
我正在用 Javascript 创建一个名为 InputHandler 的类。它有一个名为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 = 函数(事件) { 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;
}
}
正如我在 cmets 中所说,this 关键字指的是触发事件的元素。我显然不希望这样:那么如何让它引用InputLoader 的实例?
【问题讨论】:
-
为什么不直接使用闭包,而这个构造:(())()
标签: javascript events this