如何使用带有输入和输出参数的Javascript创建一个好的API集?

时间:2013-10-15 12:33:49

标签: javascript c++ api

在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的任何想法?参数中可能有对象和基本类型。

1 个答案:

答案 0 :(得分: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 ++的说法,对象通过引用传递。阅读this以获得完全理解。