js中的this的调用(学习阮一峰老师)

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

你可能感兴趣的:(js中的this的调用(学习阮一峰老师))