2

在 C++ 世界中,我们经常有这种 API 设计模式:

bool foo(int input1, int input2, int& output1, int& output2, ClassA& outputObj); 

该函数具有一组输入参数和输出参数。返回值指示函数是成功还是失败。

此 API 的一个示例是:

int input1=0;
int input2=1;
int output1=0;
int output2=1;
ClassA a = new ClassA(...);
bool r = foo(input1, input2, output1, output2, a);

但是,在 JavaScript 中,我们没有简单的方法来模拟“通过引用更改原始参数”行为。如果我们使用对象包装原始类型(numberstring)。API 会很丑。

关于如何使用带有输入参数、输出参数和返回值的 JavaScript 设计优雅的 API 有什么想法吗?参数中可能有对象和原始类型。

4

1 回答 1

0

不要将输出变量作为参数传递。而是将它们作为数组返回:

function foo(input1, input2)  {
    ...
    return [output1, output2, outputObj];
}

您还可以返回一个更具描述性的对象,例如:

function foo(input1, input2)  {
    ...
    return {importantStuff: output1, somethingElse: output2, completeObject: outputObj};
}

用于throw指示错误。

底线:它在 C++ 中完成的方式不一定是它应该在 Javascript 中完成的方式。

您似乎期望 Javascript 具有引用 ( &),例如 C++。在 Javascript 中,每个对象都是一个引用,它们是按值传递的。

所以,如果你有:

var foo = {prop: 'foo'};
function f(x) {
    x.prop = 'bar';
}
f(foo);
console.log(foo);  // Will display {prop: 'bar'}.

在 C++ 中,对象是通过引用传递的。阅读内容以获得全面理解。

于 2013-10-15T12:54:09.600 回答