为了账号安全,请及时绑定邮箱和手机立即绑定

this指针 运行结果是什么,麻烦给出详解,谢谢!

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();
查看完整描述

2 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

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
    }

所以alert(30)

查看完整回答
反对 回复 2016-10-10
?
JustWannaHugU

TA贡献452条经验 获得超796个赞

this关键字代表当前的对象

所以你代码中的this.a = 30;之类的代码,就是调用这个方法的该对象,为其属性赋值

同理,this.方法即代表调用当前对象的某个方法


查看完整回答
反对 回复 2016-10-10
  • 2 回答
  • 1 关注
  • 2934 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信