发送一个构造函数作为参数

Javascript中的好处之一是能够将函数作为参数发送。 我有一个应用程序,我必须发送类作为参数。

作为一个简单的例子,我需要一个函数对一个类进行一些testing,我想把这个类作为参数发送:

test(ClassA); test(ClassB); 

ClassA和ClassB是两个不同的类。

第一个可能的解决scheme是:

 function test(theClass) { var object1 = new theClass(); var object2 = new theClass(); assert(object1.toString()===object2.toString()); // ... more asserts ... } 

这工作得很好,但它不允许我发送参数来构造类。 例如,ClassA可能有几个初始化选项,我可能要单独testing每个选项。

第二种可能的解决scheme是:

 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“testing”。

第三个可能的解决scheme是发送一个初始化函数,而不是一个类:

 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 */ 

问题是这个“testing”函数需要一个函数而不是一个类。

我正在寻找一个函数“testing”,将类作为参数(即它将初始化一个新的对象与“新”运算符),但仍然允许调用方传递参数与类。

换句话说,我正在寻找一种方法来绑定参数与构造函数。

这是可能的Node.js?

你应该可以使用Function#bind来做到这一点,

 test(MyClass.bind(this, 1, 2, 3)); function test(klass) { var c = new klass(); /* stuff */ } 

使用new关键字时忽略的第一个参数。