了解hotkeys.js中的功能

时间:2015-04-06 14:15:11

标签: javascript jquery

我正在尝试创建一个类似于hotkeys.js的插件。

现在我刚刚浏览了源代码并遇到了以下代码:

jQuery.each(["keydown", "keyup", "keypress"], function() {
  jQuery.event.special[this] = {
    add: keyHandler
  };
});

在每个函数之后我真的无法理解这一部分:

jQuery.event.special[this] = {
  add: keyHandler
};

这部分在做什么?这种在JS中调用的构造是什么?我习惯在JS中看到嵌套的Object文字,但对它们并不完全熟悉。我也知道JS现在使用了很多对象文字来传递参数。

有人会解释上面的语法并告诉我它在做什么吗?

确切的行也可以在Github找到。

1 个答案:

答案 0 :(得分:2)

首先

jQuery.each(["keydown", "keyup", "keypress"], function() {

遍历数组["keydown", "keyup", "keypress"]。它的处理程序被调用3次(因为数组中有3个项),而此函数中的this分别是"keydown""keyup""keypress"

所以

jQuery.event.special[this] = {
  add: keyHandler
};

只需将对象({ add: keyHandler })添加到jQuery.event.special对象,其中包含密钥"keydown""keyup""keypress"

所以jQuery.event.special对象会像这样照顾:

jQuery.event.special == {
  "keydown" : {...},
  "keyup" : {...},
  "keypress" : {...},
  ....
}

someObject["childName"]表示法与someObject.childName相同。但首先允许您从某个变量(在您的情况下为this)中读取选项名称,因此使用[]

jQuery.event.special[this]可能会被重写为jQuery["event"]["special"][this]


{
  add: keyHandler
}

add是关键。 keyHandler是一个函数变量。在这种情况下,省略了键的引号,这也是正确的语法。与:相同:

{
  "add" : keyHandler
}