javascript 的this关键字总是指向一个对象,具体指向哪个对象是在运行基于函数的执行环境动态绑定的,而非函数被声明时的环境。this的指向除去with和eval的情况,具体的指向大致分为四种
1.作为对象的方法调用。
2.作为普通函数调用
3.构造器的调用
4.Fun.prototype.call 或 Fun.prototype.apply
// 1.在javascript中作为对象的方法被调用,this指向该对象
var obj = {
a:1,
getA : function(){
console.log(this === obj);
console.log(this.a);
}
};
obj.getA(); //对象调用方法 this指向对象 输出1
// 2.在javascript中作为普通函数被调用,this指向全局对象
window.name = "wu";
var myObject = {
name:"seen",
getName : function(){
return this.name;
}
};
console.log(myObject.getName()); //输出 seen
var getName1 = myObject.getName;
console.log(getName1()); //this指向全局 输出 wu
//3构造器调用 构造器中的this指向返回的这个对象
var MyClass =function() {
this.name = "seen";
};
var obj = new MyClass(); //this指向本身
console.log(obj.name); //输出seen
//4 apply call可以动态改变函数传入的th var obj1 = {
name:"sevn",
getName: function(){
return this.name;
}
};
var obj2 ={
name:"anne"
};
console.log(obj1.getName()); //输出sevn
console.log(obj1.getName.call(obj2)); //输出anne
console.log(obj1.getName.apply(obj2)); //输出sanne
call(a,b) apply(a,b) 均接受两个参数 ,a是this对象的指向 ,b是带下标的集合,可以是数组
call中的b参数要一个个全部列出,例如 call(a,1,2,3)
apply中的b参数传入数组 例如 apply(a,[1,2,3])
可以用arguments代替apply(a,arguments) apply的使用比call要多