【问题标题】:Question about function format in JavaScript关于 JavaScript 中函数格式的问题
【发布时间】:2019-02-18 22:09:57
【问题描述】:

我是 JavaScript 的新手,我正在使用 JavaScript 的 datePicker 库。我几乎使用的是开箱即​​用的代码,读取当前所选日期的函数让我有点困惑。这是代码(我对其进行了一些修改以格式化日期 - 以便将其与我的数据集的日期进行字符串匹配)。

const picker = datepicker(document.querySelector('#inlineDatepicker'), {

  // Event callbacks.
  onSelect: function(instance) {
  console.log(instance)
  var instanceSplit = instance.dateSelected.toString().split(" " ,4)
  var instanceClean = instanceSplit.toString().replace(/,/g, ' ')
    if (instanceClean === 'Mon Feb 11 2019') {
            console.log('datematch!')
            return 'blue'
        }       
      },
   });

我不熟悉onSelect: function(instance) {} 函数的格式。我见过的所有函数都是用这种格式写的:function someFunction(parameter) {}

这引出了我的问题:onSelect: function(instance) {} 函数的实际函数名称是什么?例如,如果我想根据所选日期更改数据的外观 - 即在我的数据点上返回“蓝色”笔划 - 我应该调用什么函数名称?例如,这里的代码尝试在上面的函数中传入返回的笔画值,但是它并没有将onSelect识别为函数(说它是未定义的):

var events = mapG.selectAll("circle")
    .data(allSFEvents)
    .enter().append("circle")
    .style("stroke", onSelect)

【问题讨论】:

  • datepicker 是 jQuery UI 的一种方法,或者您可能有其他一些库在那里运行,从您调用它的方式来看。 JavaScript 是一种语言,而不是组件库(实际上,它不仅限于浏览器)。关于您的代码;从onSelect 事件处理程序(这是您传递给datepicker 函数的对象的属性)返回颜色名称没有多大意义。
  • 你认为.style("stroke", onSelect) 是什么意思?

标签: javascript jquery d3.js datepicker


【解决方案1】:

根据“名称”的含义,该函数要么没有名称(它是匿名),这是根据语言定义的严格含义;否则,俗语中的“名称”就是分配给它的属性的名称。

名称是属性名称的口语含义的问题在于,它可能导致对匿名函数与该属性所在的对象之间的关系的错误假设。事实上,没有永久的关系;匿名函数与任何“父”对象没有任何隐式关联。

在您的情况下,您不太可能想要直接调用该函数。它被设置为事件处理程序,这意味着运行时或某些框架将在适当的时间调用您的函数。一般来说,如果一个对象的属性引用了一个函数,你可以通过该属性调用该函数:

var someObject = {
  someFunction: function() { alert("Hi!"); }
};

someObject.someFunction(); // alerts "Hi!"

【讨论】:

  • 感谢您的回复。让我简化我的问题:我认为我要做的只是使用该 onSelect 函数返回当前日期,以便我可以在函数之外使用它。 var selectedDate var selectedDate onSelect: function(instance) { var instanceSplit = instance.dateSelected.toString().split(" " ,4) var instanceClean = instanceSplit.toString().replace(/,/g, ' ') selectedDate = instanceClean return selectedDate }, });
  • 嗯,这是一个不同的问题:在任何典型的 JavaScript 上下文中用作事件处理程序的函数都不会“返回”任何东西。肯定有一些例外,但总的来说,这些例外是关于控制事件处理机制,而不是关于将应用程序数据从一个地方传递到另一个地方。
  • 好的。那我该如何返回日期呢?我想使用在我的代码的其他部分中选择的日期。
  • 如果事件处理程序捕获了一些信息,它可以将其存储在一些可访问的数据存储中,以供下一个事件处理程序需要时使用。事件,就其本质而言,当它们发生时就会发生。
  • @DiamondJoe12 我想说的是你问这个问题的方式没有意义。您的事件处理程序可以调用其他函数并将信息传递给它,或者它可以将信息保存在某处。术语“返回”是关于对函数的同步调用,而这根本不是事件处理程序的意义所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多