这段JavaScript的代码是什么?

时间:2014-10-04 20:37:22

标签: javascript

我不明白以下代码片段中每行的内容。我明白这是在阅读是否有人进入或逃脱。但我想了解第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;
};

2 个答案:

答案 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页面的链接:

  • 第2行和第3行正在使用the || operator,它返回"某些东西或其他东西"。在这种情况下,如果callbacks.okcallbacks.cancel未定义,它将用于提供默认值,以便其余代码可以知道okcancel点在一个有效的功能。
  • 第6行只是使用the + operator将大量字符串连接成一个对象键,在给定数字时执行添加,但在给定字符串时执行连接。
  • 第10,16和18行都是使用the call method调用回调,这是一种在调用未定义为成员的函数时为this设置适当值的方法。特别的对象。

整体效果是创建一个对象events,其中包含一个属性,其名称多次列出selector,其值是一个可以传递事件并决定两个回调中的哪一个的函数执行。

请注意,此函数不包含用于将事件实际附加到任何DOM元素的任何逻辑;它的返回值的结构可能是其他一些函数的输入。