this指针

function fn() {
    this.a = 0;
    this.b = function() {
        alert(this.a)
    }
}
fn.prototype = {
    b: function() {
        this.a = 20;
        alert(this.a);
    },
    c: function() {
        this.a = 30;
        alert(this.a);
    }
}

var myfn = new fn();
myfn.b();
myfn.c();

this是函数被调用的时候,函数被谁调用,this就指向谁;

var myfn=new fn()时,是创建了一个实例,然后实例this指向fn,然后_proto_属性指向fn的prototype属性;

因此当创建好实例,myfn实例上有a和b,(即fn里面的this.a和this.b);它的_proto_属性(相当于fn的prototype属性)上有b和c;(这里有2个b重名,如果调用b,会先查找实例上的,如果发现实例上没有,再去沿着_proto_属性去查找);

因此当执行myfn.b()时(这里在myfn上执行b函数,函数被myfn调用),

会先在myfn的实例上面去找b,这里它的实例上是有this.a和this.b,这里this指的就是myfn,因此执行b()

this.b = function() {
        alert(this.a)   //这里执行时函数是被myfn调用,因此this还是指向myfn
    }

所以就是alert(myfn.a)也就是alert(0);

当执行myfn.c()时(这里在myfn上执行 c函数,函数被myfn调用),

会先在myfn的实例上面去找c,这里它的实例上没有c,于是在myfn的_proto_(即fn的prototype)属性上去找c,执行c()

c: function() {
        this.a = 30;       //被myfn调用,this指向myfn,a覆盖原来的a;
        alert(this.a);     //被myfn调用,this指向myfn,this.a为30
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值