Javascript- Apply & Call的区别

var sayHello = function() {
  console.log("hello, world");
};

调用这个方法时,可以直接:

sayHello();
var say = function(greeting){
   console.log(greeting + ', ' + this.name);
};

用call来调用:

var person = {name: 'June'};
say.call(person, 'Hello');  //Hello, June
say.call(person, 'Goodbye'); //Goodbye, June

用apply来调用:

var person = {name: 'June'};
say.apply(person, ['Hello']);  //Hello, June
say.apply(person, ['Goodbye']); //Goodbye, June

apply 和 call是很类似的,它们都能被其他方法调用来执行这些方法,它们在一个context中调用一个方法,它们的第一参数都是context。而它们最大的区别在于执行一个具有多个参数的方法。

var update = function(name, age, size){ 
    this.name = name; 
    this.age = age; 
    this.size = size;
};
update.call(person, 'Slarty',  200,  '1xM');
update.apply(person2, ['Slarty', 200, '1xM']); 

call接收多个参数需要依次列出。在ECMAScript 6 中,如果参数个数不定时或者多个时,可以使用...操作符【注:不支持 IE, Safari <= 8, Android Browser, iOS Safari 7 and node.js <= 4. 】。

fun.call(thisArg[, arg1[, arg2[, ...]]])

apply第二个参数必须是个数组,数组由这些参数组成。

fun.apply(thisArg, [argsArray])

你可能感兴趣的:(Javascript- Apply & Call的区别)