Перегрузка функций в Javascript - лучшие практики

Я не уверен, что это лучший способ, но я нашел следующий метод для работы (частично основанный на ответах выше):

1) Загрузите пакет .tar

2) Переместите пакет в каталог с вашими пользовательскими R-библиотеками (например, в моем случае это было «C: /Users/yourUserName/Documents/R/win-library/3.3»)

3) В Rstudio (или где-то еще, возможно), запустите команду ... install.packages("packageName.tar", repos=NULL, type="source")

Это работало для меня как минимум. Надеюсь, это полезно!

716
задан Sergey Maksimenko 2 July 2015 в 07:47
поделиться

5 ответов

Лучший способ сделать перегрузку функции с параметрами не состоит в том, чтобы проверить длину аргумента или типы; проверка типов просто сделает Ваш код медленным, и у Вас есть забава Массивов, аннулирует, Объекты, и т.д.

, Что делает большинство разработчиков лавировать на объекте как последний аргумент их методам. Этот объект может содержать что-либо.

function foo(a, b, opts) {
  // ...
  if (opts['test']) { } //if test param exists, do something.. 
}


foo(1, 2, {"method":"add"});
foo(3, 4, {"test":"equals", "bar":"tree"});

Тогда можно обработать его так или иначе, Вы хотите в своем методе. [Переключатель, если еще, и т.д.]

553
ответ дан S.Serpooshan 2 July 2015 в 07:47
поделиться
  • 1
    Сделайте у Вас есть любое доказательство для " Вы не можете улучшить Конкатенацию строк на se"? – Duncan McGregor 3 March 2011 в 23:24

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

69
ответ дан Knu 2 July 2015 в 07:47
поделиться

Существует два способа, которыми Вы могли приблизиться к этому лучше:

  1. Передача словарь (ассоциативный массив), если Вы хотите оставить большую гибкость

  2. , Берет объект в качестве аргумента и использует основанное на прототипе наследование для добавления гибкости.

26
ответ дан t3rse 2 July 2015 в 07:47
поделиться

Лучший способ действительно зависит от функции и аргументов. Каждая из Ваших опций является хорошей идеей в различных ситуациях. Я обычно пробую их в следующем порядке до одного из них работы:

  1. Используя дополнительные аргументы как y = y || 'значение по умолчанию'. Это удобно, если бы можно сделать это, но это не может всегда работать практически, например, когда 0/null/undefined был бы допустимым аргументом.

  2. Используя количество аргументов. Подобный последней опции, но может работать, когда № 1 не работает.

  3. типы Проверки аргументов. Это может работать в некоторых случаях, где количество аргументов является тем же. Если Вы не можете надежно определить типы, Вы, возможно, должны использовать различные имена.

  4. Используя различные имена во-первых. Вы, возможно, должны сделать это, если другие опции не будут работать, не практичны, или для непротиворечивости с другими связанными функциями.

16
ответ дан Matthew Crumley 2 July 2015 в 07:47
поделиться

Можно использовать этот метод

function func1(a, b, c) {
  console.log(arguments[0]);
  // expected output: 1

  console.log(arguments[1]);
  // expected output: 2

  console.log(arguments[2]);
  // expected output: 3
}

func1(1, 2, 3);

касательно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

0
ответ дан 22 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: