原型继承
//父类
function A (name){
this.name = "aaa"
}
A.prototype.say = function(){
console.log(this.name)
}
//子类
function B(name){
this.name = "bbb"
}
B.prototype.tell = function(){
console.log(this.name)
}
B.prototype = new A()//让原型指向实例对象
B.prototype.constructor = B//让子类的原型的constructor指向子类
var b = new B()
b.say()//调用会报错,没有这个方法,此时让B.prototype = new A()
构造函数继承
//假继承,简化了代码
function A(name,age){
this.name = name;
this.age = age;
}
function B(name,age,price){
A.call(this,name,age)//相当于:this.name = name;this.age=age;此时的this是动态的指向a
this.price= price;
}
var a = new B("z",18,18000)
console.log(a.name,a.age,a.price)
混合继承
function A (name,age){
this.name = name;
this.age = age
}
A.prototype.say = function(name){
this.name = name
}
function B(name,age,price){
A.call(this,name,age)
this.price= price
}
B.prototype = new A()//为了能看到父类的方法
B.prototype.constructor = B//修正constructor属性
B.prototype.tell = function(price){
this.price= price
}
var b = new B("z",18,888)
b.say("h")
b.tell (999)
console.log(b.name,b.age,b.price)