javascript原型,继承

//普通对象
//函数对象(有原型 prototy 的属性)
//原型的应用 继承
function Amial(){
    this.type = '小于'
}
function cat(name){
    this.name = name
}
cat.prototype = new Amial()
var cat1 = new cat('小张')
console.log(cat1.name,cat1.type)

//构造器  继承 缺点:把父元素的属性都复制了
function Amial(){
    this.type = '动物'
}
function amm(name){
    Amial.apply(this) //调用Amial构造器 Amial == amm
    //Amial.call(this,x,y,z)  Amial.apply(this,[x,y,z])
    this.name = name
}
var a = new amm('张三')
console.log(a.type)

//组合继承(原型+构造器) 缺点:调用两次父类构造器

function Preson(name){
    this.arr = ['js','php']
    this.name = name
}
Preson.prototype.showname = function(){
    console.log(this.name)
}
function teacher(name,gread){
    Preson.call(this,name)
    this.gread = gread
}
teacher.prototype = new Preson() // 最关键的一句
var a = new teacher('xiaoming', 23)
console.log(a.arr,a.name,a.gread)
a.showname()

//原型+构造+寄生
function father(name){
    this.arr = ['aa','bb']
    this.name = name
}
father.prototype.showname = function(){
   console.log(this.name)
}
function son(name,course){
   father.call(this,name)
   this.course = course
}
function extend(subobj,superobj){
   var proobj = Object.create(superobj.prototype)
   subobj.prototype = proobj
}
extend(son, father)
var a = new son('xiaoming', 23)
console.log(a.arr,a.name,a.course)
a.showname()
原文地址:https://www.cnblogs.com/carry-carry/p/11635007.html