Вопрос о формате функции в JavaScript

Я новичок в JavaScript и работаю с библиотекой JavaScript datePicker. Я в значительной степени использую код из коробки, и функция, которая считывает текущую выбранную дату, меня немного смущает. Вот код (который я немного изменил, чтобы отформатировать дату, чтобы сопоставить ее с датами моего набора данных).

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

  // Event callbacks.
  onSelect: function(instance) {
  console.info(instance)
  var instanceSplit = instance.dateSelected.toString().split(" " ,4)
  var instanceClean = instanceSplit.toString().replace(/,/g, ' ')
    if (instanceClean === 'Mon Feb 11 2019') {
            console.info('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, или у вас может быть какая-то другая библиотека, судя по тому, как вы ее называете. JavaScript — это язык, а не библиотека компонентов (действительно, он не ограничивается браузерами). Что касается вашего кода; не имеет большого смысла возвращать название цвета из обработчика событий onSelect (который является свойством объекта, который вы передаете функции datepicker).

Heretic Monkey 18.02.2019 23:15

Что, по-вашему, должно означать .style("stroke", onSelect)?

Pointy 18.02.2019 23:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
42
1

Ответы 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 }, });

DiamondJoe12 18.02.2019 23:39

Что ж, это проблема разные: функция, используемая в качестве обработчика событий в любом типичном контексте JavaScript, не «возвращает» что-либо. Конечно, есть несколько исключений, но в целом они связаны с управлением механизмами обработки событий, а не с передачей данных приложения из одного места в другое.

Pointy 18.02.2019 23:40

В порядке. Как мне тогда вернуть дату? Я хочу использовать дату, выбранную в других разделах моего кода.

DiamondJoe12 18.02.2019 23:41

Если обработчик события захватывает некоторую информацию, он может сохранить ее в каком-либо доступном хранилище данных для использования, когда она потребуется следующему обработчику событий. События по самой своей природе происходят тогда, когда они случаются.

Pointy 18.02.2019 23:41

@ DiamondJoe12 Я пытаюсь сказать, что то, как вы задаете этот вопрос, не имеет смысла. Ваш обработчик событий может вызвать какую-то другую функцию и передать ей информацию, или он может где-то сохранить информацию. Термин «возврат» относится к вызовам функций синхронный, а обработчик событий просто не об этом.

Pointy 18.02.2019 23:43

Хм. Да, я думаю, что хочу сохранить информацию где-нибудь. Например, глобальная переменная, которая будет постоянно обновляться по мере изменения выбранной даты. Имеет ли это смысл?

DiamondJoe12 19.02.2019 00:10

Да, тот имеет смысл. Теперь поймите, что, поскольку события происходят тогда, когда они происходят, вы должны проверить, действительно ли значение доступно в тот момент, когда вы собираетесь его использовать.

Pointy 19.02.2019 00:12

Другие вопросы по теме