gpt4 book ai didi

JavaScript 函数 : Applying Apply

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:02 27 4
gpt4 key购买 nike

我被这种奇怪的事情难住了。

假设我有这个数组:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com