4

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 中可行吗?

4

1 回答 1

1

您应该可以使用 Function#bind 来执行此操作,

test(MyClass.bind(this, 1, 2, 3));

function test(klass) {
    var c = new klass();
    /* stuff */
}

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

于 2013-08-27T10:33:34.447 回答