我被这种奇怪的事情难住了。
假设我有这个数组:
var array = [{
something: 'special'
}, 'and', 'a', 'bunch', 'of', 'parameters'];
我可以apply
函数的apply
方法来调用this
对象的函数{something:'special '}
而参数是 array
的其余部分?
换句话说,我可以这样做吗
var tester = function() {
console.log('this,', this);
console.log('args,', arguments);
};
tester.apply.apply(tester, array);
期望输出如下?
> this, {"something": "special"}
> args, {"0": "and", "1": "a", "2": "bunch", "3": "of", "4": "parameters"}
我试过了。
TypeError: Function.prototype.apply: Arguments list has wrong type
但是为什么?看起来这应该可行。
最佳答案
But why?
让我们逐步减少调用次数:
tester.apply.apply(tester, array) // resolves to
(Function.prototype.apply).apply(tester, array) // does a
tester.apply({something: 'special'}, 'and', 'a', 'bunch', 'of', 'parameters');
在这里你可以看到哪里出了问题。正确的是
var array = [
{something: 'special'},
['and', 'a', 'bunch', 'of', 'parameters']
];
然后 apply.apply(tester, array)
会变成
tester.apply({something: 'special'}, ['and', 'a', 'bunch', 'of', 'parameters']);
它做了一个
tester.call({something: 'special'}, 'and', 'a', 'bunch', 'of', 'parameters');
因此对于您的原始数组
,您需要使用
(Function.prototype.call).apply(tester, array)
关于JavaScript 函数 : Applying Apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686568/