javascript之apply与call方法

apply

作用:调用函数,并用指定对象替换函数的 this 值,同时用指定数组替换函数的参数。

语法:apply([thisArg [,argArray]])

参数:

  • thisArg: 可选,要用作this对象的对象。

  • argArray:可选,传递给函数的参数数组

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function callMe(arg1, arg2) {
var s = '';

s += 'this value: ' + this;
s += '\n';
for (i in callMe.arguments) {
s += 'arguments: ' + callMe.arguments[i];
s += '\n';
}
return s;
}

console.log('Original function: ')
console.log(callMe(1, 2));

console.log('Function called with apply:')
console.log(callMe.apply('otherObj', [4, 5]));

// Output:
// Original function:
// this value: [object Window]
// arguments: 1
// arguments: 2

// Function called with apply:
// this value: otherObj
// arguments: 4
// arguments: 5

call

作用:调用一个对象的方法,用另一个对象替换当前对象。

语法:call([thisObj[, arg1[, arg2[, [, argN]]]]])

参数:

  • thisObj: 可选。将作为当前对象使用的对象。
  • arg1, arg2, , argN: 可选。将被传递到该方法的参数列表。

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function callMe(arg1, arg2) {
var s = '';

s += 'this value:' + this;
s += '\n';
for (i in callMe.arguments) {
s += 'arguments:' + callMe.arguments[i];
s += '\n';
}
return s;
}

console.log('Original function: \n');
console.log(callMe(1, 2));
console.log('\n');

console.log('Function called with call: \n');
console.log(callMe.call(3, 4, 5));

// Output:
// Original function:
// this value: [object Window]
// arguments: 1
// arguments: 2

// Function called with call:
// this value: 3
// arguments: 4
// arguments: 5