继承
看了很多写继承的,自己觉得还是有必要记录下。
function Parent(name,age){
this.age=age;
this.name=name;
}
Parent.prototype.type=function(){
console.log('tihs is Parent prototype')
}
function Child(){
this.type="child"
}
- 借用原型链继承
Child.prototype = new Prent();
- 解决:
- 可以继承父类的所有方法和属性。
- 缺点:
- 来自原型对象的所有属性被共享。
- 无法传入参数
- 借用构造函数实现
function Child(){ Parent.call(this) }
- 解决:
- 子类实例共享父类自有属性。
- 可以传参。
- 缺点:
- 不能继承父类原型里的方法。
- 组合继承1
function Child(){ Paren.call(this); } Child.propertype =new Parent() //组合1.1 Child.propertype =Parent.propertoty //组合1.2
- 解决:
- 可以继承到父类原型的方法。
- 问题:
- 调用两次父类构造函数(1.1)
- child parent公用原型。
- 组合继承2经典
function Child(){ Parent.call(this); } function CreateExtends(parent,child){ function empty(){}; empty.propotype = parent.propotype; child.prototype = new empty() }
- Class extends
class Parent(){ constructor(name,age){ this.name=name; this.age=age } showParent(){ console.log('this is parent') } } class Child extends Paren{ constructor(name,age){ supper(name,age); this.type="child" } showType(){ console.log(this.type) } }