JavaScript中this对象
在js的函数中经常看到如下语句,不明白有什么作用。
function person(name){
this.name=name;
}
this对象是谁取决于函数被调用的方式,在JavaScript中,函数具有四种调用方式:
一、直接调用,此时函数中的this在ES3/ES5非严格模式下为全局对象,在浏览器中即为window
var x=1;
function test(){
alert(this.x); 此时this为window
}
test(); //结果为1
二、某个对象的方法调用,这时this指这个上级对象
function test(){
alert(this.x); //此时this指o
}
var o={};
o.x=1;
o.m=test;
o.m(); //输出为1
三、作为构造函数调用
所谓构造函数,实际上就是通过这个函数生成一个新的对象,此时this就是指这个新对象
function test(){
this.x=1; //this为o
}
var o=new test();
alert(o.x); //输出为1
为了表明this不是全局对象,对代码做如下调整:
var x=2;
function test(){
this.x=1;
}
var o = new test();
alert(x); //结果为2,表面全局变量的x根本没有变
四、apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象,因此this指的就是这个第一个参数
var x=0;
function test(){
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); //结果为0
apply()参数为空时,默认调用全局对象,所以这时的运行结果为0,此时,this为全局对象,如果最后一行改为
o.m.apply(o); //结果为1