Javascript の優れた点の 1 つは、関数をパラメーターとして送信できることです。クラスをパラメーターとして送信する必要があるアプリケーションがあります。
簡単な例として、クラスでいくつかのテストを行う関数が必要で、クラスをパラメーターとして送信したいと考えています。
test(ClassA);
test(ClassB);
ここで、ClassA と ClassB は 2 つの異なるクラスです。
最初に考えられる解決策は次のとおりです。
function test(theClass) {
var object1 = new theClass();
var object2 = new theClass();
assert(object1.toString()===object2.toString());
// ... more asserts ...
}
これはうまく機能しますが、クラスを構築するためのパラメーターを送信することはできません。たとえば、ClassA にはいくつかの初期化オプションがあり、各オプションを個別にテストしたい場合があります。
2番目に考えられる解決策は次のとおりです。
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, {});
これはうまく機能しますが、面倒です。2 つのパラメーターを送信する必要があり、関数「test」がサブ関数を使用する場合、これら 2 つのパラメーターを最後まで送信する必要があります。パラメータを 1 つだけ取る関数「test」を探しています。
3 番目に考えられる解決策は、クラスの代わりに初期化関数を送信することです。
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 */
問題は、この「テスト」関数がクラスではなく関数を取ることです。
クラスを引数として取る (つまり、"new" 演算子を使用して新しいオブジェクトを初期化する) 関数 'test' を探していますが、呼び出し元はクラスと一緒に引数を渡すことができます。
つまり、引数をコンストラクターにバインドする方法を探しています。
これはNode.jsで可能ですか?