我们知道在js中的this指针一点还是比Java中的this指针复杂点
官方给出的两个函数定义call(thisObj,arg1,arg2...)、apply(thisObj,[obj1,obj2...])
其中的thisObject就是指的this指针,这个thisObject是当前执行环境的上下文,也就是当前执行环境所指的对象,这个对象可以是js中的任意一个对象,默认的是window对象。
call函数:传入的参数必须一个一个的给列举出来,不能传入数组
apply函数:传入的参数必须传入的是数组的形式
function func() { var sum = function (para1, para2) { return para1 * para2; } function callSum(para1, para2) { return sum.call(this,para1, para2); } console.log(callSum(10, 20)); } function sum(para1, para2) { return para1 + para2; } function callSum( para1, para2) { return sum.call(this, para1, para2); } function applySum(para1, para2) { return sum.apply(this, [para1, para2]);//也可以这样写return sum.apply(this,arguments) } console.log(callSum( 100, 20));//输出120 console.log(applySum(10, 20));//输出30 func();//输出200
可以看出在func中这个this指向的是当前的func这个执行环境,所以会调用func中的sum函数,而不是window下面的sum函数
bind函数的使用是:bind方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
var color='red'; function sayColor(){ console.log(this.color); } var obj={ color:'blue' } var bindSayColor1=sayColor.bind(obj); bindSayColor1();//blue
由以上可以看出,bind函数的this值默认的是当前执行环境var bindSayColor2=sayColor.bind(); bindSayColor2();//red