Javascript 的优点之一是能够将函数作为参数发送。我有一个应用程序,我必须将类作为参数发送。
作为一个简单的例子,我需要一个对类进行一些测试的函数,并且我想将该类作为参数发送:
test(ClassA);
test(ClassB);
其中 ClassA 和 ClassB 是两个不同的类。
第一种可能的解决方案是:
function test(theClass) {
var object1 = new theClass();
var object2 = new theClass();
assert(object1.toString()===object2.toString());
// ... more asserts ...
}
这很好用,但它不允许我发送构造类的参数。例如,ClassA 可能有几个初始化选项,我可能想分别测试每个选项。
第二种可能的解决方案是:
function test(theClass, theInitializationOptions) {
var object1 = new theClass(theInitializationOptions);
var object2 = new theClass(theInitializationOptions);
assert(object1.toString()===object2.toString());
// ... more asserts ...
}
我可以这样使用:
test(ClassA, {option1: 1, option2: 2...});
test(ClassA, {option1: 2, option2: 3...});
test(ClassB, {});
这很好用,但很麻烦——它需要我发送两个参数,如果函数“test”使用子函数,它必须一直发送这两个参数。我正在寻找一个只需要一个参数的函数“测试”。
第三种可能的解决方案是发送初始化函数而不是类:
function test(theClassConstructor) {
var object1 = theClassConstructor();
var object2 = theClassConstructor();
assert(object1.toString()==object2.toString());
}
我可以这样使用:
test(function() { return new ClassA(1,2,3); }) /* test class A */
test(function() { return new ClassB(4,5); }) /* test class B */
问题是这个“测试”函数需要一个函数而不是一个类。
我正在寻找一个函数'test',它将一个类作为参数(即它将使用“new”运算符初始化一个新对象),但仍然允许调用者将参数与类一起传递。
换句话说,我正在寻找一种将参数与构造函数绑定的方法。
这在 Node.js 中可行吗?