首先,这三个方法的相同点是
(1)改变函数的this对象的指向
(2)第一个参数接受的都是你要指定的执行上下文
(3)都可以继续传入参数
//这里注意的一点是这三个都是函数的方法,我在这里犯错了。下面开始介绍:
1、call()方法:
第一个参数就不废话了,传入你要指定的执行上下文,它后面还可以继续传入多个参数
function sum(num1,num2){
return num1+num2;
}
function fn(arg1,arg2){
console.log(sum.call(this,arg1,arg2)); //这里的两个参数是一个一个依次传入的
}
fn(1,2);
以上这段代码就是把sum函数的执行上下文转变为fn,并且把fn的两个参数传入;
2、apply()方法:
这个方法和call方法的用法基本是一致的,不同的是第一个参数后面的参数传入方式不同,
function sum(num1,num2){
return num1+num2;
}
function fn(arg1,arg2){
console.log(sum.apply(this,[arg1,arg2])); //这里的参数是以数组形式传入
}
3、
bind()方法:
这是在ES5里面定义的一个方法,它会创建一个函数实例
//先定义
var a = 100 ;
var obj = {
a : 99,
getA : function(){
return this.a;
}
}
var myGet = obj.getA;
console.log(myGet()); //输出100
//下面通过bind函数来绑定对象,然后输出
var myGet1 = obj.getA.bind(obj);
console.log(myGet1()); //输出99