欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

25_面向对象程序设计(原型【八】继承的三种方式

程序员文章站 2022-06-15 13:46:28
...

实现继承的几种方式:

    简单继承(原型继承)
原型继承的特点:即继承了父类的模板,又继承了父类的原型对象

//父类
function Person(name, age){
    this.name = name;
    this.age = age;
};

//父类的原型对象属性
Person.prototype.id = 10;

//子类
function Boy(sex){
    this.sex = sex;
};

//使用原型链方式实现继承
Boy.prototype = new Person("z3");

var b = new Boy();
console.info(b.name); //z3
console.info(b.id); //10

    类继承(模版继承或借用构造函数继承)
只继承模板,不继承原型对象

//父类
function Person(name, age){
    this.name = name;
    this.age = age;
};

//父类的原型对象属性
Person.prototype.id = 10;

//子类
function Boy(name, age, sex){
    //借用构造函数,继承父类的模板
    //使用call()方法后相当于在Boy()中增加了两条语句this.name = name; this.age = age;
    //不会使用到Person.prototype原型对象中的任何属性和方法
    Person.call(this, name, age); 
    
    this.sex = sex;
};

var b = new Boy("z3", 20, "男");

console.info(b.name); //z3
console.info(b.age); //20
console.info(b.sex); //男
console.info(b.id); //undefinde 父类的原型对象并没有被继承

    混合使用继承实现完整的继承
原型继承和借用构造函数继承,目前使用较多

//父类
function Person(name, age){
    this.name = name;
    this.age = age;
};

//父类的原型对象属性
Person.prototype.id = 10;

Person.prototype.sayName = function(){
    console.info(this.name);
};

//子类
function Boy(name, age, sex){
    //借用构造函数,继承父类的模板
    //使用call()方法后相当于在Boy()中增加了两条语句this.name = name; this.age = age;
    //不会使用到Person.prototype原型对象中的任何属性和方法
    Person.call(this, name, age); 
    
    this.sex = sex;
};

Boy.prototype = new Person(); //原型继承 此处可以不再传递参数

var b= new Boy("李四", 20, "男");
console.info(b.name);
console.info(b.id); //10 使用的是父类原型中的属性
b.sayName(); //李四 使用的是父类原型中的方法


转载于:https://my.oschina.net/u/2317126/blog/387371