Javascript keydown 操作对象

标签 javascript scope keyboard event-listener

我正在尝试创建一个对象来处理用户的键盘输入。

var control = new Control ();

function Control () {
    this.w = 0;
    this.a = 0;
    this.s = 0;
    this.d = 0;
    document.addEventListener("keydown", this.KeyDown);
    document.addEventListener("keyup", this.KeyUp);
}
Control.prototype.KeyDown = function (event, control) {
    switch (event.keyCode) {
        case 87:
            this.w = 1;
            break;
        case 65:
            this.a = 1;
            break;
        case 83:
            this.s = 1;
            break;
        case 68:
            this.d = 1;
            break;
    }
    console.log("w: " + this.w + "\na: " + this.a + "\ns: " + this.s + "\nd: " + this.d);
}
Control.prototype.KeyUp = function (event) {
    switch (event.keyCode) {
        case 87:
            this.w = 0
            break;
        case 65:
            this.a = 0;
            break;
        case 83:
            this.s = 0;
            break;
        case 68:
            this.d = 0;
            break;
    }
    console.log("w: " + this.w + "\na: " + this.a + "\ns: " + this.s + "\nd: " + this.d);
}

问题是,每当我在“keyDown”和“keyUp”函数中写入“this”时,“this”指的是文档,而不是“control”对象。如何从函数内访问“控制”对象?

最佳答案

  1. this.KeyDown,this.KeyUp 将在 Control 构造函数中为 undefined,您需要移动 var control = new Control (); 最后。
  2. 您可以使用以下代码绑定(bind)control上下文。

    document.addEventListener("keydown", this.KeyDown.bind(this)); document.addEventListener("keyup", this.KeyUp.bind(this));

注意:IE8 不支持绑定(bind),替代方案是 here

关于Javascript keydown 操作对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486857/

相关文章:

ios - Swift - 多个 UI 更改相互阻塞

javascript - 停止滚动条增长

javascript - 如何在 Javascript 中比较事件和 HTML 标签

javascript - 如何从一个js文件访问另一个js文件中的对象?

AngularJS:指令范围没有被调用 $destroy

c++ - 无法成功返回我通过在字符串上调用 c_str() 创建的 const char*。 (C++)

javascript - ReactJS 表单提交如何访问字段值?

c++ - 局部作用域对象按什么顺序被破坏?

ios - 检查 UITextField 可见但在键盘后面

ios - 我可以通过代码将 iPad 键盘设置为对接类型/未对接类型/拆分类型吗?