更改函数中的第一个参数

时间:2013-01-06 03:48:44

标签: javascript function arguments apply

我想做这样的事情:

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', '!');

1 个答案:

答案 0 :(得分:5)

您的代码确实有效(我刚刚在Firefox中测试过,最新版本)。

但是,我可以想象一些实现在将arguments对象作为值传递给Function.prototype.apply时可能会出现问题。所以试试:

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

    log.apply(this, args);
}

通过在Array.prototype.slice - 对象上调用arguments,我们创建了一个“ true ”ECMAscript Array ,我们可能需要将其作为第二个参数.apply()