Javascript 这个.fn.apply(这个,参数)是多余的吗?

Javascript 这个.fn.apply(这个,参数)是多余的吗?,javascript,Javascript,我刚刚在JavaScript代码库中遇到以下语句: this.fn.apply(this, arguments); 根据我对apply函数的理解,它的目的是更改此的值。但是,由于函数所附加到的同一对象正在传递给apply,因此我看不出这与: this.fn(arguments); 我的理解正确吗?或者第一种方法有什么不同吗?apply采用一系列参数,因此: 给定的参数=[1,2,3] this.fn.apply(this, arguments); 将给你: this.fn(1,2,3);

我刚刚在JavaScript代码库中遇到以下语句:

this.fn.apply(this, arguments);
根据我对
apply
函数的理解,它的目的是更改
的值。但是,由于函数所附加到的同一对象正在传递给
apply
,因此我看不出这与:

this.fn(arguments);

我的理解正确吗?或者第一种方法有什么不同吗?

apply
采用一系列参数,因此:

给定的
参数=[1,2,3]

this.fn.apply(this, arguments);
将给你:

this.fn(1,2,3);
this.fn( [1,2,3] );
但是:

将给你:

this.fn(1,2,3);
this.fn( [1,2,3] );

apply
中的第二个参数应该是类似数组的,并且是长度为
length
的类似数组的对象,该类似数组的对象在传递到
apply
时会自动转换为一组参数

这里有一个简单的例子

var arr = ['val1', 'val2'];

test.apply(null, arr);

function test(arg1, arg2) {
    // arg1 == val1
    // arg2 == val2
}
如果你直接打电话

var arr = ['val1', 'val2'];

test(arr);

function test(arg1, arg2) {
    // arg1 == ['val1', 'val2'];
    // arg2 == undefined
}
所以有一个区别,当您直接传递arguments数组时,它只是作为第一个参数传递给函数,但是当使用
apply()
传递时,数组将转换为一组参数

另一方面,
call()
接受一组参数

test.call(this, 'arg1', 'arg2');