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

/**
 * 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.的绑定是动态的,只有当真正触发的时候才会进行绑定,一般来说绑定着触发这个方法或环境的上下文对象。

你可能感兴趣的:(在原型链之中的查询及this指向问题)