В JavaScript я хочу создать экземпляр объекта (через оператор new
), но передать конструктору произвольное число аргументов. Возможно ли это?
Я хочу сделать что-то вроде этого (но код ниже не работает):
function Something(){
// init stuff
}
function createSomething(){
return new Something.apply(null, arguments);
}
var s = createSomething(a,b,c); // 's' is an instance of Something
Ответ
Из ответов здесь стало ясно, что нет встроенного способа вызова .apply()
с помощью оператора new
. Тем не менее, люди предложили ряд действительно интересных решений проблемы.
Мое предпочтительное решение было это от Matthew Crumley (я изменил его, чтобы передать свойство arguments
):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();