0

別の関数内で関数を実行したい場合は、次のような引数のいくつかを渡すことができます。

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
}
4

1 に答える 1

0

はい、うまくいくはずです。コードに含まれていない場合は、 の代わりにArray.prototype.slice.call(arguments,1)(または) を使用することを検討してください。これは、このjsfiddleスニペットにもあるテストコードです。[].slice.call(arguments,1)arguments.splice(1)

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
于 2011-02-11T12:35:20.413 に答える