1.原型链继承 :继承方法
每一个构造函数都有一个原型对象 : Parent.prototype
每个实例都有一个指向原型对象的指针 : par.__proto__
原型链继承是通过创建Parent的示例,并把它挂载到Son的原型对象上实现的。
实例化对象son1调用sayName方法:1)会从实例自身找,如果有,停止往下寻找
2)否则,会从son1的原型 son1.__proto__,也就是Son.prototype去找
3)Son.prototype挂载着Parent的实例化对象,现在自身属性上找,没有,然后实例化对象也有自己的 __proto__,指向原型对象 , Parent.Prototype,找到了sayName方法
//原型链问题 :构造函数上如果有定义了引用类型的属性会被所有实例公用
2.借用构造函数继承 :继承属性
原理:通过call() 改变this指向
3.组合继承 (原型链+借用构造函数继承)
原型链继承方法,借用构造函数继承属性
4.原型式继承
要求 有一个对象可以作为另一个对象的基础,传入一个对象,返回一个把这个对象赋值给返回对象的原型上,实现继承
和原型链继承相似,person.color因为是引用类型的属性。,所以会被object实例化出来的实例共享