//继承
function Person(){
this.name="张收"
this.age=20
this.run=function(){
alert(`${this.name}在跑步`)
}
}
Person.prototype.sex='boy'
Person.prototype.work=function(){
alert(`${this.name}${this.sex}在工作`)
}
//1、原型链+对象冒充组合继承
function Work(){
Person.call(this)
}
let w=new Work()
//w.work() //报错w.work is not a function
w.run() //对象冒充可以继承构造函数里面的方法 但是无法继承原型链上的方法
//2、原型链继承 可以继承构造函数里面的方法,又可以继承原型链上的方法
function Web(){
}
Web.prototype=new Person();
let we=new Web()
we.run();
we.work()
//3、原型链继承的问题:实例化子类没法给父类传参
function Person2(name,age){
this.name=name
this.age=age
this.run=function(){
alert(`${this.name}在跑步`)
}
}
function proErr(){
}
proErr.prototype=new Person2()
var w3=new proErr('tom',20)
w3.run() //undefined在跑步
//解决传参问题 对象冒充继承 实例化子类可以给父类传参
function rightType(name,age){
Person2.call(this,name,age)
}
rightType.prototype=new Person2()
var rt=new rightType('Jerry',20)
rt.run() //Jerry在跑步