如何使用带有输入和输出参数的Javascript创建一个好的API集? 在C++世界中,我们经常有这样的API设计模式: bool foo(int input1, int input2, int& output1, int& output2, ClassA& outputObj);

如何使用带有输入和输出参数的Javascript创建一个好的API集? 在C++世界中,我们经常有这样的API设计模式: bool foo(int input1, int input2, int& output1, int& output2, ClassA& outputObj);,javascript,c++,api,Javascript,C++,Api,该函数有一组输入参数和输出参数。返回值指示函数是成功还是失败 此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中,我们没有简单的方法来模拟“通过引用更改原始参数”行为。如果我们使用对象包装基元类型(number,stri

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

此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中,我们没有简单的方法来模拟“通过引用更改原始参数”行为。如果我们使用对象包装基元类型(
number
string
等)。API将是丑陋的


你知道如何使用JavaScript设计一个优雅的API,包括输入参数、输出参数和返回值吗?参数中可能有对象和基元类型。

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

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++语句中,对象是通过引用传递的。阅读以充分理解。

但在许多情况下,我们需要“更改”参数。例如:foo(machineObj){//change the state of machineObj machineObj.doSth1();machineObj.doSth2();}@LinZ:请参阅我添加的链接,以了解Javascript中值的语义。我了解按值和按引用的区别。我担心的是,没有“优雅”的方式来实现“bool foo(int-input1,int-input2,int-output1,int-output2,ClassA-outputbj)”的效果。在javascript中,如果将基元类型包装到字典中,调用方中的代码将是冗长的。@LinZ:是的,您不能这样做。但无论如何,返回数组/对象更明显!参数用于将内容传递到函数中。C++/C/Java使用通过引用传递参数以返回参数的技巧,只是因为在这些语言中无法返回多个值。在Javascript中,有一种简单的方法(返回数组)。