делегировать в JavaScript - PullRequest
       3

делегировать в JavaScript

2 голосов
/ 09 октября 2009

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

как моя функция

myfunction(obj){
otherfunction(?);
}

другая функция может быть

otherfunction(obj){
}

или

otherfunction(){
}

Я не знаю, передавать ли параметр или нет.

как я могу вызвать метод

Ответы [ 4 ]

2 голосов
/ 09 октября 2009

Вы можете вызывать функции javascript с любым количеством аргументов:

function myFunction ( firstValue, secondValue )
{
  if ( firstValue ) alert ( firstValue );
  if ( secondValue ) alert ( secondValue );
}


myFunction (); //works but no alert
myFunction ("Hello");// 1 alert
myFunction ("Hello", "World");// 2 alerts

как видите, все три вызова метода работают, хотя он объявлен с 2 аргументами

1 голос
/ 09 октября 2009

Вы можете получить список аргументов, передаваемых вашей функции, независимо от того, что вы указали в сигнатуре своей функции, посмотрев на локальную переменную arguments.

Вы можете вызывать функцию с любым количеством аргументов, используя метод Function apply.

Итак, чтобы создать функцию-оболочку, которая передает все свои аргументы в функцию-оболочку:

function myfunction() {
    otherfunction.apply(window, arguments);
}

Это то, что вы пытаетесь сделать?

(window - это значение, которое this будет установлено в упакованной функции; если у вас нет определенного объекта, для которого вы вызываете метод, обычно используется глобальный объект window. )

1 голос
/ 09 октября 2009

JavaScript на самом деле не требует, чтобы вы передавали все параметры функции. Или любые параметры. Или вы можете передать больше параметров, чем имен функций в ее сигнатуре.

Если функция определяет параметр, obj, но вы просто вызываете его как

otherfunction();

Тогда obj просто не определено.

1 голос
/ 09 октября 2009

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

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