这三个关键字经常看到,但是从来没有做过详细的区分。或者说,每次用的时候看一眼,就继续专注在别的事情上去了。今天整理一下下。
首先,这三个方法的用法十分相似,都是用来改变函数运行时的上下文联系,其实就是改变this的指向。this引用的是函数执行的环境对象,就是调用this的时候才会去寻找它指向谁。
好,先说apply和call。
两者用法基本相同,用途是在特定的作用域中调用函数,接收的第一个参数是运行函数的作用域,如果call和apply的第一个参数是null, 那么this就指向了windows。
唯一的不同是apply传参数会一整个数组传入,而call则是一个个数值进行传递。
举个栗子呢:
banana.call(this, arg1, arg2);
banana.apply(this, [arg1, arg2]);
banana.apply(this, arguments); //传入arguments对象
那么当你要传的参数数量是确定的时候呢,用哪个都可以。
可是如果你有一个数组,但你不知道里面有多少个值,这时候就需要用apply,不可以用call。
apply()和call()的强大还在于能扩充函数运行的作用域,即对象和方法不需要有耦合关系。
那么bind呢,是创建了一个新函数,this值会被绑定到传给bind()函数的值
window.a = 1;
var obj = { a: 2};
function sayA() {alert(this.a);}
var newA = sayA.bind(o);
newA(); //2
不知道大家喜不喜欢看很多例子,我是有点懒得看一些长篇大论的。。这篇总结就简短的写在这里啦
参考:
http://www.admin10000.com/document/6711.html