Javascript功能:应用Apply

前端之家收集整理的这篇文章主要介绍了Javascript功能:应用Apply前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被这种怪异所困扰.

假设我有这个数组:

var array = [{
  something: 'special'
},'and','a','bunch','of','parameters'];

我可以应用函数的apply方法调用函数,该对象是{something:’special’},参数是数组的其余部分吗?

换句话说,我可以这样做吗?

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

在这里你可以看到出了什么问题.正确的是

var array = [
    {something: 'special'},['and','parameters']
];

那么apply.apply(tester,array)就会变成

tester.apply({something: 'special'},'parameters']);

哪个做了

tester.call({something: 'special'},'parameters');

因此,您需要使用原始阵列

(Function.prototype.call).apply(tester,array)
原文链接:https://www.f2er.com/js/151399.html

猜你在找的JavaScript相关文章