Одна из приятных вещей в Javascript - возможность отправлять функции в качестве параметров. У меня есть приложение, в котором мне нужно отправлять классы в качестве параметров.Отправить конструктор в качестве параметра
В качестве простого примера, мне нужна функция, которая делает некоторые тесты на классе, и я хочу, чтобы отправить класс в качестве параметра:
test(ClassA);
test(ClassB);
где ClassA и ClassB два разных класса.
A 1ое возможное решение состоит в:
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, {});
Это хорошо работает, но это громоздко - это требует от меня, чтобы отправить два параметра, и если функция «тест» использует подфункции, она должна будет отправить эти два параметра полностью вниз. Я ищу функцию '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 */
Проблема в том, что эта функция «тест» принимает вместо класса.
Я ищу функцию 'test', которая возьмет класс в качестве аргумента (т. Е. Инициализирует новый объект с помощью «нового» оператора), но все же позволяет вызывающему передавать аргументы вместе с классом.
Другими словами, я ищу способ связывания аргументов с конструктором.
Возможно ли это в Node.js?
Работает отлично, спасибо. –