JS几种继承方式

//继承
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在跑步

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值