YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

this的深入浅出

在javascript中this是一个关键词,在javascript中很常用,但是对于初学者却是一件很头痛的存在,时常让人搞不懂this指向的是什么。纵然this的还以丰富多彩带式归根到底它就是函数运行时,自动生成的一个内部对象,并且只能在函数内部使用。并且随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

情况一:函数的调用

纯粹的函数调用,这个是函数的组常见的用法,抢看下面代码

function flower(){r
    this.fr = "玫瑰";
    alert(this.f)
    }
    flower();

运行的结果为:玫瑰。
这个时候的this指向的是全局,也就是window。
为了证明上述的结论大家可以在函数内部用console.log(this)看一下this的指向。也可以变换下代码

var f='玫瑰'
function flower(){
    alert(this.f)
}
flower();

运行结果是一样的。

情况二:做为对象方法的调用

大家都知道,函数可以作为某个对象的方法调用。这时 的this就指的是这个上级对象。

function flower(){
    alert(this.f)
}
var o = {};
o.f='玫瑰';
o.m=flower;
o.m()

运行结果就为:玫瑰。

情况三:作为构造函数调用

所谓的构造函数,就是通过这个函数生成的一个新对象(object).这时,this就指的这个新对象。

function flower(){
    this.f='玫瑰';
    }
var o = new flower();
alert(o.f)

这时运行的结果依然是玫瑰。

情况四:apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。

var f='玫瑰';
function flower(){
    alert(this.f)
}
var o = {};
o.x = '百合';
o.m = flower;
o.m.apply();

运行结果为:玫瑰。
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。如果把最后一行代码修改为

o.m.qpply(o);

运行结果为:百合。证明了这时的this指的是对象o.