js的继承与原型链探究

1.Object.create(obj,{})方法实现

    var car =  {
        color:'red',
        getColor:function () {
            console.log(this.color)
        }
    }
    newObj = Object.create(car,{
        t1:{
            value:'zzzzzzz',
            writable:true
        },
        bar: {
            configurable: false,
            get: function() { return bar; },
            set: function(value) { bar=value }
        }
    });
    newObj.getColor();  // red
    function Person(){}
    Person.prototype.name = 'aaa';
    Person.prototype.sayName = function(){
        alert(this.name);
    };
    var person1=new Person();

    // 继承:
    function Teacher(){}
    Teacher.prototype = new Person();
    Teacher.prototype.constructor = Teacher;
    var teacher = new Teacher();
    alert(teacher.age);

Person.prototype.constructor ;//指向构造函数 Person
person1.__proto__ == Person.prototype ;//创建的实例包含__proto__属性,并且指向构造函数的原型;
当访问对象 teacher.age的时候,因为没有实例上没有这个属性,会通过实例的__proto__寻找到构造函数 Teacher的原型对象;
如果Teacher的原型上没有,
由于Teacher的原型对象指向了Person的实例person1,所以如果person1没有age属性,
通过__proto__寻找到构造函数Person的原型对象;
如果Person.protorype仍然不包含age属性,就会继续向上找,直到Object 的原型

你可能感兴趣的:(js的继承与原型链探究)