this指向
this指向上一级调用它的对象
//例1
var obj1 = {
a: 10,
b: function(){
alert(this.a);
}
}
obj1.b();//将输出 10,this即是obj1
//例2
var obj2 = {
a: 10,
b: function(){
alert(this.a);
}
}
var newFuc = obj2.b;
newFuc();//将输出 undefined,this即是window,因为调用newFuc是全局下调用
apply,call,bind用法
apply,call,bind都是用来解决上例2 this指向作用域指向非我们想指向的位置时,明确定位this
//衔接以上例2
//例3
var obj2 = {
a: 10,
b: function(){
alert(this.a);
}
}
var newFuc = obj2.b;
newFuc.apply(obj2);//输出10,因为使用apply将this指向obj2达到所要效果
newFuc.call(obj2);//输出10,因为使用call将this指向obj2达到所要效果
newFuc.bind(obj2)();//输出10,因为使用bind将this指向obj2达到所要效果
第一参数都是传入所需this,后续参数也可以为函数传入所需参数。apply传参以数组的形式,将函数所需参数依次放入数组即可。call和bind传参从第二位开始依次传入即可。
var obj3 = {
a: 10,
b: function(param1,param2){
alert(this.a + param1 + param2);
}
}
var newFuc = obj3.b;
newFuc.apply(obj3,['个','人']);//输出 10个人
newFuc.call(obj3,'个','人');//输出 10个人
newFuc.bind(obj3,'个','人')();//输出 10个人
- [x]以上要注意bind返回的是函数,所以必须再次执行才生效。
网友评论