JavaScript 'this'关键字

'this'关键字在JavaScript里面非常容易引起误解和错误。和其他语言相比,'this'关键字在JavaScript里面有很多不同。在面向对象语言中,'this'关键字指向类的当前实例。在JavaScript里面,this的值是由函数的调用环境和所处位置决定。在大部分情况,this的值决定于函数是如何被调用的。它在执行期间不能被赋值设定,并且在函数每次被调用的时候都可能不相同。

全局域

在全局域环境使用'this'关键字,它被绑定到全局对象(浏览器的窗口)

document.write(this); //[object Window]

当在一个在全局域定义的函数里面使用this的时候,this仍然绑定在全局对象上面,它是从全局域的一个方法创建这个函数开始的。

function foo(){
return this;
}
document.write(foo()); //[object Window]

上面的foo是全局对象的一个方法创建的。

调用一个函数

如果你正调用一个函数,'this'关键字会保留这个全局对象。

window.meGlobal = "I'm the window object";
function foo() {
alert(this.meGlobal); // I'm the window object
alert(window === this); // true
}
foo();

在构造函数里面

当函数被用作一个构造函数使用时(用new关键字调用),在函数内的this指向被创建的新对象。

var globalVar = "I am Global";
function callMe()
{
this.globalVar = "inside function";
}
var obj1 = new callMe(); //adds globalVar to obj1
document.write(obj1.globalVar); //call me
原文链接