Использование .apply () с оператором 'new'. Это возможно?
В 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
оператор. Тем не менее, люди предложили ряд действительно интересных решений проблемы.
Мое предпочтительное решение былоэтот от Мэтью Крамли (Я'мы изменили его, чтобы передатьarguments
имущество):
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();