Javascript的继承机制

一:在构造函数里面的属性和方法是不通过实例共享的;
	function A() {
        this.name = "睿睿",
        this.fn=function(){
        	console.log(this.name)
        }
    }
    var a = new A();
    var b = new A();
    //通过实例a修改构造函数本身的属性name值
    a.name = "瑞瑞";
     //发现只有实例a的name值发生变化,实例b没有发生变化;说明:在构造函数里面的属性和方法是不通过实例共享的;
    console.log(a.name);  //瑞瑞
    console.log(a.fn());  //瑞瑞
    console.log(b.name);  //睿睿
    console.log(b.fn());  //睿睿
二: 在构造函数的原型对象(prototype)里面的属性和方法,是所有的实例所共享的;
	function A() {
        this.name = "睿睿"
    }
    //往构造函数A的原型对象(prototype)里面添加name属性(prototype里面添加的name和构造函数里面的属性name不一样)
    A.prototype.name = "张睿"
    //A有俩个实例(a , b)
    var a = new A();
    var b = new A();
    //此时,a和b同时访问A原型对象中的name属性,获取的是一样的;说明:在构造函数的原型对象(prototype)里面的属性和方法,是所有的实例所共享的;
    console.log(a.__proto__.name);  //张睿
    console.log(b.__proto__.name);  //张睿

总结:实例对象需要共享的属性和方法,都放在原型对象(prototype)里面;那些不需要共享的属性和方法,就放在构造函数里面。

(此话来源于阮一峰老师):由于所有的实例都共享原型对象(prototype)里面的属性和方法,所以看起来prototype就像是所有实例对象的原型,而实例对象就像是继承了peototype对象一样;

完!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章