Аналогичный метод, применяемый при создании объекта - PullRequest
0 голосов
/ 11 февраля 2011

Если я хочу запустить функцию в другой функции, я могу передать некоторые аргументы, например, так:

function applyFunc(type) {
    myNamespace[type].apply(this, arguments.splice(1));
}

Но есть ли подобный метод (или действительно простой обходной путь) для создания экземпляра нового объекта, т.е. передать внешние аргументы во внутреннюю функцию, но тоже используя ключевое слово new?

function newObj(type) {
    new myNamespace[type].apply(this, arguments.splice(1)); //apply doesn't work here
}

1 Ответ

0 голосов
/ 11 февраля 2011

Да, это должно работать. Если этого нет в вашем коде, вы можете рассмотреть возможность использования Array.prototype.slice.call(arguments,1) (или [].slice.call(arguments,1)) вместо arguments.splice(1). Вот некоторый тестовый код, который также можно найти в этом фрагменте jsfiddle :

function C(){}

C.prototype.fun = function(){
 alert('hello'+[].slice.call(arguments).join('\n'));
};

function newf(t){
 new C()[t].apply(this,[].slice.call(arguments,1));
}

new C().fun.apply(null,[1,2,3]); //works
newf('fun',1,2,3); //works
...