作者的话:原型链是JavaScript中相当重要的一个知识点,这里我使用了函数结构图,来帮助我更好的理解
1 /* 2 原型链继承方式: 3 通过改变一个对象的原型对象的指向来继承另一个对象 4 原理: 5 我们知道,一个对象的实例会继承他的原型对象的所有属性和方法。所以说,如果,我们继承对象的原型对象,是被继承对象的原型对象的实例的话,那么,他不就继承了被继承对象的原型对象的所有属性和方法了么 6 */ 7 //创建一个被继承对象,并给他两个属性 8 function a(){ 9 this.name = "兔子只吃胡萝卜"; 10 this.age=12; 11 } 12 13 /* 14 利用构造方法来创建继承对象 15 */ 16 //创建一个继承对象,这里我们不给他设置任何属性 17 function b(){ 18 } 19 //我们让继承对象的原型对象得到被继承对象的实例 20 b.prototype = new a(); 21 //我们为继承对象创建一个实例 22 var b1 = new b(); 23 console.log(b1.name);//"兔子只吃胡萝卜" 24 console.log(b1.age);//12 25 26 /* 27 直接创建继承对象的实例 28 */ 29 var c = { 30 }; 31 c.__proto__ = new a(); 32 console.log(c.name);//"兔子只吃胡萝卜" 33 console.log(c.age);//12
原型链继承中,存在着缺陷,其中,最明显的缺陷就是在使用引用类型的时候,会导致原型对象中,引用的数据发生改变,从而影响了我们需要使用的数据