在原型链之中的查询及this指向问题

来源:互联网 发布:net java做什么用 编辑:程序博客网 时间:2024/06/15 08:35
/** * Created by zhang on 2017/5/9. */var Sup = function(){    this.name = "sup";    this.getName = function(){        console.log("go in sup get");        return this.name;    }}var sup = new Sup();//超类搭建完毕var Sub = function(){    // this.name = "sub";    // this.getName = function(){    //     console.log("go in sub get");    //     return this.name;    // }}Sub.prototype = sup;var sub = new Sub();console.log(sub.getName());//记录

//情景1
// 方法在子类实例中 属性在超类之中, 首先寻找对应方法,在子类方法中调用,然后寻找属性name,在子类实例中未找到,然后触发查询,在超类中找到,返回超类Name属性 结果 进入子类方法 返回超类属性

//情景2
// 方法在超类实例中 属性在子类实例中,首先寻找方法,触发查询在超类内部,在超类调用getname方法,但其中的this指向了调用这个方法的上下文环境,也就是子类实例,所以不会指向超类的name。

//情景3
// 方法和属性都在超类实例之中,这样会触发两次查询,首先查询到超类方法之中,然后这里面的this是绑定在子类实例之上的,但是子类内部没有name属性,所以触发第二次查询value,最后在超类内部找到并返回

//原则
内部未找到就触发原型链查找,这里面的this.的绑定是动态的,只有当真正触发的时候才会进行绑定,一般来说绑定着触发这个方法或环境的上下文对象。

0 0