1.属性的继承
function Person(name,age){
this.name=name;
this.age=age;
}
//call能够实现属性的继承
function Teacher(name,age,skill){
var self=this;
Person.call(self,name,age)
this.skill=skill;
}
var t=new Teacher("zhang",18,"js")
console.log(t);//Teacher {name: "zhang", age: 18, skill: "js"}
2.方法的继承
第一种方法
//原型对象:js的继承就是基于原型的继承
//第一种 方法的继承
function Person(name,age){ //Person 类
this.name=name;
this.age=age;
}
Person.prototype.sayName=function(){ //在Person类的原型对象上添加一个sayName()方法
console.log(this.name);
}
function Teacher(name,age,skill){ //Teacher类
Person.call(this,name,age); //继承Person类的属性,用call改变this的指向,从指向window到指向Teacher的实例对象
this.skill=skill
}
Teacher.prototype=Person.prototype; //重置Teacher类的原型对象,
Teacher.prototype.sayAge=function(){ //在Teacher类的原型对象上添加一个sayAge()方法
console.log(this.age);
}
Teacher.prototype.constructor=Teacher; //由于应直接量给对象原型添加了属性,所以要重置构造属性
var t=new Teacher("zahng",18,"js"); //Teacher类的一个实例
var p=new Person("lisi",13) //Person类的一个实例
console.log(t);//输出对象
console.log(t.constructor);//输出实例的构造属性
t.sayAge()//18,调用sayAge()方法
第二种方法
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.sayName=function(){
console.log(this.name);
}
function Teacher(name,age,skill){
Person.call(this,name,age);
this.skill=skill
}
Teacher.prototype=Object.create(Person.prototype,{
constructor:{
value:Teacher
}
})
Teacher.prototype.sayAge=function(){
console.log(this.age);
}
var t=new Teacher("zhang",18,"js");
console.log(t);
console.log(t.constructor);