Javascript 这个.fn.apply(这个,参数)是多余的吗?
我刚刚在JavaScript代码库中遇到以下语句: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);
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');