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 的原型

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容