神奇的this

来源:互联网 发布:自我管理那个软件好 编辑:程序博客网 时间:2024/05/29 17:18

有一点很重要,this是个变色龙,它指向谁是不定的,也不是在函数定义的时候确定的

栗子1:

<pre name="code" class="html">function a(){    var user = "追梦子";    console.log(this.user); //undefined    console.log(this); //Window}a();window.a();



栗子中的函数a 是window的一个属性,alert也是,this是指向调用它的对象的,函数a被window调用,故第二个输出为Window,而Window中没有user这个属性,故为undefined.

栗子2:

var o = {    a:10,    b:{        a:12,        fn:function(){            console.log(this.a); //12        }    }}o.b.fn();

还有个中重要的情况:this指向的是执行它的主体,而不是赋值的主体。

var o = {    a:10,    b:{        a:12,        fn:function(){            console.log(this.a); //undefined            console.log(this); //window        }    }}var j = o.b.fn;j();
如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
在构造函数中,如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例

function fn(){    this.num = 1;}var a = new fn();console.log(a.num); //1
首先new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

0 0
原创粉丝点击