总结:this指向调用函数的那个对象。
在不同的应用场景this的指向有所不同,但细细思考都符合总结的意思。
场景一:一般的函数调用
这种常见的函数调用方式this指向的是window,因为相当于是window对象调用的函数。
var name = "window"; function test(){ this.name = "local"; } test();//window.test(); alert(name);// local window.name 属性被修改成了 local
场景二:作为对象的方法被调用
这种方式this就指向了此对象。
var name = "window"; var test = { name : "local", getName: function(){ return this.name; } }; alert(test.getName());// local this指向的是test对象
加入了闭包
var name = "window"; var test = { name : "local", getName: function(){ return this.name; } }; alert(test.getName());// local this指向的是test对象
getName方法返回一个函数,形成闭包,注意调用方法"test.getName()()","test.getName()"返回的是一个函数,那么"test.getName()()"就是调用此函数,所以调用的其实是
function(){
return this.name;
};
而这时的this已经指向了window了,所以test.getName()()等价于window.test.getName()()。如果要this保持对test对象的指向,就要将环境保存下来在test.getName()()中使用,如下:
var name = "window"; var test = { name : "local", getName: function(){ return this.name; } }; alert(test.getName());// local this指向的是test对象
场景三:作为构造函数被调用
var name = "window"; var test = { name : "local", getName: function(){ return this.name; } }; alert(test.getName());// local this指向的是test对象
参考:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html