apply()、call()、bind()的区别

[TOC]
都用于改变函数的执行环境,可以改变函数体内 this 的指向

1.JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语法分别为:

1
2
3
4
5
/*apply()方法*/
function.apply(thisObj[, 参数数组])
/*call()方法*/
function.call(thisObj,arg1,arg2...);

它们各自的定义:

apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。


bind()方法

  • 概念:bind会创建一个新函数,称为绑定函数,当调用这个函数的时候,绑定函数会以创建它时传入bind()方法的第一个参数作为this,传入bind()方法的第二个及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数
  • bind与apply、call最大的区别就是:bind不会立即调用,其他两个会立即调用

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
var cat = {color:"blue"};
window.color = "red";
function showColor(){
console.log(this.color);
}
showColor.bind(cat); //没有任何输出
showColor.bind(cat)(); //输出blue
showColor.call(cat);//输出blue
showColor.apply(cat);//输出blue
var newShowColor = showColor.bind(cat);
newShowColor(); //输出blue

热评文章