想要继承,就必须要提供个父类(继承谁,提供继承的属性)
父类
function People(name,age) {给构造函数添加了参数
this.name=name;
this.age=age;
}
People.prototype.eat = function (content) {给构造函数添加了原型属性
console.log("我是peopole的吃方法现在是:"+this.name+"在调用我")
}
prototype原型属性
一、原型链继承
function Man(name,age,sex)
{
People.call(this,name,age)
this.sex=sex;
}
// 把父类的原型链赋值给子类,可以实现原型链继承
Man.prototype=new People()
// 纠正子类构造函数的指向,让它指向自己
Man.prototype.constructor=Man;
二、借用构造函数继承
var p1 = new People("张三", 22)
console.log(p1)
// p1.say("hello!")
// 构造函数创建子类
function Man(name, age, sex){
// name\age属性在父类中已经定义好了
// 指定调用函数中的this指向
// 对象冒充,让Man对象冒充People对象电泳People构造函数,People构造函数中this指向Man对象
// People.call(this, name, age)
People.apply(this,[name, age])
// 子类自定义的属性
this.sex = sex
}
var m = new Man("李四", 23, "男")
console.log(m)
// 构造函数继承只继承父类构造函数中的属性,不能继承原型链上的方法
// m.say("你好!") 因为不会继承原型链所以执行父类的方法会报错
三、构造函数结合原型链继承(常用)
function People(name,age) {
this.name=name;
this.age=age;
}
People.prototype.eat = function (content) {
console.log("我是peopole的吃方法现在是:"+this.name+"在调用我")
}
function Man(name,age,sex)
{
People.call(this,name,age)
this.sex=sex;
}
Man.prototype=new People()
Man.prototype.constructor=Man;
// Man.prototype.eatdouble=function()
// {
// this.eat()
// console.log("你好我是重写的方法")
// }
Man.prototype.eat=function()
{
console.log("你好我是重写的方法")
}
// Man.eat()
var m=new Man("秦先生",15,"男")
console.log(m)
m.eat()