先看两个简单的示例
**示例-1:**这里的this指向调用的对象
var obj = {
name:'甄妮',
oAge:28,
oFun:function(){
console.log(this.name + "年龄" + this.age);
}
}
console.log(obj.name);//打印甄妮
obj.oFun(); //打印甄妮 undefined
**示例-2:**这里的this指向的是window
var name = '周星星',age = 27;
function shows(){
console.log(this.name);
}
shows();//打印周星星
A1:call( ) apply( ) bind( )都是用来重新定义this这个对象指向的。
var name = '周星星',age = 27;
var obj = {
name:'甄妮',
oAge:28,
oFun:function(){
console.log(this.name + "年龄" + this.age);
}
}
var obj2 = {
name:'周定发',
age:29
}
obj.oFun.call(obj2);//打印周定发年龄29
obj.oFun.apply(obj2);//打印周定发年龄29
obj.oFun.bind(obj2)();//打印周定发年龄29
**注:**1.返回的结果一致:我们传入哪个对象,this指向的就是哪个对象。
2. bind 方法后面多了个 () 。由此可知,bind 返回的是一个新的函数。
B2:call( ) apply( ) bind( )的传参
给对象的方法添加两个参数:
oFun:function(from,to){
console.log(this.name + "年龄" + this.age,"来自" + from + "去往" + to);
}
obj.oFun.call(obj2,'观塘','离岛');//打印 周定发年龄29 来自观塘去往离岛
obj.oFun.apply(obj2,['观塘','离岛']);//打印周定发年龄29 来自观塘去往离岛
obj.oFun.bind(obj2,'观塘','离岛')();//打印周定发年龄29 来自观塘去往离岛
obj.oFun.bind(obj2,['观塘','离岛'])();//打印周定发年龄29 来自观塘,离岛去往undefined
call的参数是直接放进去的,传多个参数的话用逗号隔开。
apply的参数都必须放在数组里传进去,同样可以传多个。
apply参数传递和call一样.
**注:**三者的传参类型都允许是各种类型包括函数、object那些。