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”使用子函数,它必须一直发送这两个参数。我正在寻找一个只需要一个参数的函数'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'函数需要一个函数而不是一个类。
我正在寻找一个函数'test',它将一个类作为参数(即它将使用“new”运算符初始化一个新对象),但仍允许调用者将参数与类一起传递。
换句话说,我正在寻找一种用构造函数绑定参数的方法。
这在Node.js中是否可行?
答案 0 :(得分:1)
您应该可以使用Function#bind来执行此操作,
test(MyClass.bind(this, 1, 2, 3));
function test(klass) {
var c = new klass();
/* stuff */
}
使用this
关键字时会忽略第一个参数new
。