• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

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

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)

使用道具 举报

this关键字代表当前的对象
所以你代码中的this.a = 30;之类的代码,就是调用这个方法的该对象,为其属性赋值
同理,this.方法即代表调用当前对象的某个方法

使用道具 举报

发新帖

发布任务需求已有1031290位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!