this是javascript的一个关键字,也是比较容易令人迷糊的一个概念
this的本质:当前对象的所有者
示例1
var x = 1;
function test() {
alert(this.x);
}
test();
在之前的“JS执行顺序”文章中讲过,这个test函数会被先编译为一个全局变量,如
var test = function test() {
alert(this.x);
};
所以这个this所属对象为全局对象,this.x 就是全局变量 x,alert弹出值为'1'
示例2
var x = 2;
function test() {
alert(this.x);
}
var obj = {};
obj.x = 1;
obj.func = test;
o.func();
这个输出结果为'1',因为这里test被赋给了对象obj,this的所有者就是obj,this.x 也就是 obj.x
示例3
下面这个例子比较有迷惑性,是一个比较容易出错的情况
function test() {
alert(this.title);
}
<input type="button" value="test" onclick="test()" title="i am button"/>
输出的结果:undefined
其实onclick="test()",相当于
function onclick(event){
test();
}
是一个全局的function,上面的 test方法也是全局的function,而全局变量中并没有定义 title,所以结果为 undefined