Как лучше всего реализовать параметрические усилители в JavaScript?

Я использую JavaScript с jQuery. Я хотел бы реализовать параметрические усилители. В C# это выглядело бы примерно так:

/*
 * odp      the object to test
 * error    a string that will be filled with the error message if odp is illegal. Undefined otherwise.
 *
 * Returns  true if odp is legal.
 */
bool isLegal(odp, out error);

Что лучший способ состоит в том, чтобы сделать что-то вроде этого в JS? Объекты?

function isLegal(odp, errorObj)
{
    // ...
    errorObj.val = "ODP failed test foo";
    return false;
}

Firebug говорит мне, что вышеупомянутый подход работал бы, но является там лучшим путем?

35
задан Nick Heiner 4 July 2010 в 18:10
поделиться

3 ответа

Да, как вы сами упомянули, объекты - лучший и единственный способ передачи данных по ссылке в JavaScript. Я бы оставил вашу функцию isLegal как таковую и просто вызывал ее следующим образом:

var error = {};
isLegal("something", error);
alert(error.val);
16
ответ дан 27 November 2019 в 06:45
поделиться

Я думаю, что это довольно почти единственный способ (но я не заядлый программист на JavaScript;)).

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

function onError(data) {
    // do stuff
}


function isLegal(odp, cb) {
    //...
    if(error) cb(error);
    return false;
}

isLegal(value, onError);
15
ответ дан 27 November 2019 в 06:45
поделиться

Подход обратного вызова, упомянутый @Felix Kling, вероятно, лучшая идея, но я также обнаружил, что иногда легко использовать синтаксис литерала объекта Javascript и просто сделать так, чтобы ваша функция возвращала объект при ошибке:

function mightFail(param) {
  // ...
  return didThisFail ? { error: true, msg: "Did not work" } : realResult;
}

тогда, когда вы вызываете функцию:

var result = mightFail("something");
if (result.error) alert("It failed: " + result.msg);

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

41
ответ дан 27 November 2019 в 06:45
поделиться
Другие вопросы по тегам:

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