我不明白以下代码片段中每行的内容。我明白这是在阅读是否有人进入或逃脱。但我想了解第2,3,6,10,16和18行正在做什么。
var okCancelEvents = function (selector, callbacks) {
var ok = callbacks.ok || function () {};
var cancel = callbacks.cancel || function () {};
var events = {};
events['keyup '+selector+', keydown '+selector+', focusout '+selector] =
function (evt) {
if (evt.type === "keydown" && evt.which === 27) {
// escape = cancel
cancel.call(this, evt);
} else if (evt.type === "keyup" && evt.which === 13) {
// blur/return/enter = ok/submit if non-empty
var value = String(evt.target.value || "");
if (value)
ok.call(this, value, evt);
else
cancel.call(this, evt);
}
};
return events;
};
答案 0 :(得分:2)
var ok = callbacks.ok || function(){};
如果callbacks.ok
未定义,则创建stub
函数。 http://en.wikipedia.org/wiki/Method_stub并设置ok
以存储对该函数的引用或在callbacks.ok
中引用
var cancel = callbacks.cancel || function(){};
callbacks.cancel
events ['keyup'+ selector +',keydown'+ selector +',focusout'+ selector]
创建对象events
(上一行)并使用函数填充其属性'keyup '+selector+', keydown '+selector+', focusout '+selector
。
cancel.call(this,evt);
通过存储在cancel
变量中的引用调用函数,并列出参数。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call
ok.call(this,value,evt);
相同,但用于ok
变量中的函数引用。
答案 1 :(得分:2)
JavaScript参考资料的一个很好的来源是Mozilla Developer Network。
选择您提到的行,并指向相关MDN页面的链接:
callbacks.ok
或callbacks.cancel
未定义,它将用于提供默认值,以便其余代码可以知道ok
和cancel
点在一个有效的功能。call
method调用回调,这是一种在调用未定义为成员的函数时为this
设置适当值的方法。特别的对象。整体效果是创建一个对象events
,其中包含一个属性,其名称多次列出selector
,其值是一个可以传递事件并决定两个回调中的哪一个的函数执行。
请注意,此函数不包含用于将事件实际附加到任何DOM元素的任何逻辑;它的返回值的结构可能是其他一些函数的输入。