学习了js这么久了,一直没有弄懂js中的this到底是什么鬼,有时候它是全局变量,有时候它指向全局变量,(在浏览器中是 window变量),有时候又指向对象。下面为大家做一个总括。
参考:http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/#ibm-pcon
第一种情况:对象中的函数this指向这个对象
//声明对象
var obj = {
data:"data",
test:function(){
console.log(this.data);
}
}
obj.test();//输出data
第二种情况:普通函数中的this指向全局变量(window)
function Point(x,y){
this.x = x;
this.y = y;
this.showXY = function(){
console.log(this.x+" "+this.y);
}
}
Point(4,5);//执行Point函数后,为window.x window.y 赋值
showXY();//执行全局的window.showXY()函数,读取全局x,y
第三种情况:将函数当作构造函数调用的话this指向新的对象
function Point(x,y){
this.x = x;
this.y = y;
this.showXY = function(){
console.log(this.x+" "+this.y);
}
}
var ins = new Point(5,6);
ins.showXY();
第四种情况:调用apply和call函数,this指向对象参数
function Point(x,y){
this.x = x;
this.y = y;
this.showXY = function(){
console.log(this.x+" "+this.y);
}
}
var obj2 = {
x:0,y:0
};
Point.apply(obj2,[78,5]);
showXY.apply(obj2);//这儿的this指向的是obj2这个对象