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