发送一个构造函数作为参数
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
关键字时忽略的第一个参数。