Как передать параметры в оценке в объектной форме?

Это является немного трудоемким, но это делает задание:

  1. Щелчок правой кнопкой любой файл в Проводнике Решения и выборе 'Не откладывает Незаконченные Изменения...' из контекстного меню.

  2. Двойной щелчок соответствующий shelveset в Неотложить диалоговом окне.

  3. Двойной щелчок файл, который Вы хотите сравнить. Это откроет sheleveset версию файла в блокноте.

  4. Сохранили файл где-нибудь на Вашей локальной машине.

  5. Близкий все диалоговые окна.

  6. Щелчок правой кнопкой локальная версия рабочей области Вашего файла в Проводнике Решения и выборе 'Выдерживает сравнение' из контекстного меню.

  7. Изменение путь назначения к тому из файла, который Вы сохранили ранее и нажимаете "OK".

6
задан Sinan 30 September 2009 в 21:24
поделиться

2 ответа

Зависит от того, где вызываемая функция определена (глобальная или локальная).

Если глобальная, вам не нужен eval (и безопаснее избегать этого), вы просто ссылаетесь на функцию через глобальное окно объект:

var args = [];
for(var p in json.callback.callbackParams) {
    args.push(json.callback.callbackParams[p]);
}
window[json.callback.callbackName].apply(null, args)

См. Использованную выше функцию apply () .

Если она находится в локальной области видимости, вам понадобится eval (как у вас это нормально).

12
ответ дан 8 December 2019 в 17:23
поделиться

Не используйте eval. Вы можете получить ссылку на именованную глобальную переменную или функцию из объекта window :

var callbackfunction= window[json.callback.callbackName];

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

callbackfunction.call(window, json.callback.callbackParams.param1, json.callback.callbackParams.param2);

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

Лучше автоматизировать его, чтобы принимать любые количество параметров должно превратить callbackParams в простой массив:

callbackParams: [1, 2]

, а затем использовать apply для вызова функции:

callbackfunction.apply(window, json.callback.callbackParams);
2
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

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