4

私はこのようなことをしたいと思います:

function start(){
    // Change the first argument in the argument list
    arguments[0] = '<h1>' + arguments[0] + '</h1>';

    // Call log with the new arguments
    // But outputs: TypeError: Illegal invocation
    log.apply(this, arguments);
}

function log(){ 
    console.log(arguments);   
    // should output -> ['<h1>hello<h1>', 'world', '!']
}


start('hello', 'world', '!');
4

1 に答える 1

5

あなたのコードは実際に動作します (最新バージョンの Firefox でテストしたところです)。

ただし、一部の実装では、値として に渡すときにオブジェクトに問題ある可能性があると想像できます。だから試してください:argumentsFunction.prototype.apply

function start(){
    var args = Array.prototype.slice.call( arguments );
    args[0] = '<h1>' + args[0] + '</h1>';

    log.apply(this, args);
}

-objectを呼び出すことによりArray.prototype.slice、 「真の」 ECMAscript Arrayargumentsを作成します。これは、2 番目の引数として必要になる場合があります。.apply()

于 2013-01-06T03:54:44.430 に答える