#javascript #typescript #constructor
#javascript #typescript #конструктор
Вопрос:
Некоторые библиотеки и фреймворки JavaScript предоставляют возможность ранней привязки свойств, так что разработчики имеют возможность использовать эти связанные свойства даже в конструкторах. Мне нужно сделать тот же взлом для тестов.
Основная проблема заключается в том, что это свойство bind используется в конструкторе, и я не могу создать экземпляр контроллера для покрытия тестами.
Конструктор класса не должен быть изменен (добавление новых параметров или что-то в этом роде), потому что логика создания класса управляется фреймворком, и я не хочу добавлять какие-либо необязательные параметры в конструктор класса.
Я пробовал что-то подобное. Не повезло, потому что я чего-то не хватает.
function createMyController(bindProperty, ...controllerArgs) {
let myController = Object.create(MyController);
myController.bindProperty = bindProperty;
MyController.constructor.apply(myController, [...controllerArgs]);
// post creation assignments or modifications
return myController;
}
Ответ №1:
Конструкторы Typescript допускают использование свойств параметров, которые делают именно это.
Комментарии:
1. Спасибо за ответ, но, боюсь, я не смогу изменить параметры конструктора
Ответ №2:
Этот тип привязки называется предварительной привязкой, и он использовался, например, в angularjs (angular 1). Идея, лежащая в основе этой предварительной привязки, заключается в инициализации некоторых свойств перед вызовом функции конструктора.
Это можно решить, сначала инициировав объект некоторого типа. Затем привязка всех необходимых значений. И, наконец, вызов самого конструктора.
function createMyController(bindProperty, ...controllerArgs) {
let myController = Object.create(MyController.prototype);
myController.bindProperty = bindProperty;
MyController.call(myController, ...controllerArgs);
// post creation assignments or modifications
return myController;
}