原型链继承
方式一:原型链
套路
- 定义父类型和构造函数
- 给父类型的原型添加方法
- 定义子类型的构造函数
- 创建父类型的对象赋值给子类型的原型
- 将子类型原型的构造属性设置为子类型
- 给子类型原型添加方法
- 创建子类型的对象:可以调用父类型的方法
关键
- 子类型的原型为父类型的一个实例对象
//定义父类型和构造函数 function Supper(){ this.supProp='father' } //给父类型的原型添加方法 Supper.prototype.showFather=function(){ console.log(this.supProp); } //定义子类型的构造函数 function Childen(){ this.chiProp='childen' } //子类型的原型为父类型的一个实例对象 Childen.prototype=new Supper() //让子类型原型的constructor指向子类型 Childen.prototype.constructor=Childen //给子类型原型添加方法 Childen.prototype.showChilden=function(){ console.log(this.chiProp); } var childen1=new Childen() childen1.showFather() console.log(childen1.constructor);
方式二:借用构造函数继承(假的:这是调用不是继承)
套路
- 定义父类型构造函数
- 定义子类型构造函数
- 在子类型构造函数中调用夫类型构造函数
关键
- 在子类型构造函数中通过call()调用父类型构造函数
function Person(name,age){ this.name=name this.age=age } function Student(name,age,price){ Person.call(this,name,age) this.price=price } var s=new Student('Tom',20,14000) console.log(s.name,s.age,s.price);
方式三:原型链+借用构造函数的组合继承
利用原型链实现对父类对象方法的继承
利用call()借用夫类型否早函数初始化相同属性
function Person(name,age){ this.name=name this.age=age } Person.prototype.setName=function(name){ this.name=name } function Student(name,age,price){ Person.call(this,name,age)//为了得到属性 this.price=price } Student.prototype=new Person()//为了得到父类型的方法 Student.prototype.constructor=Student//修正constructor属性 Student.prototype.setPrice=function(price){ this.price=price } var s=new Student('Tom',20,14000) s.setName('Bob')