关于JavaScript中的函数格式的问题

时间:2019-02-18 22:09:57

标签: javascript jquery d3.js datepicker

我对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)

1 个答案:

答案 0 :(得分:0)

根据您所说的“名称”的含义,该函数要么没有名称(它是 anonymous ),但这是根据语言定义的严格含义;否则,通俗地说,“名称”就是为其分配属性的名称。

使用俗称的问题是,名称是属性名称,这可能导致对匿名函数与该属性所在对象之间关系的错误假设。实际上,没有永久关系;匿名函数没有与任何“父”对象的任何隐式关联。

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

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

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