我正在尝试创建一个类似于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找到。
答案 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
}