美文网首页
面向对象(八)继承___ 05组合继承

面向对象(八)继承___ 05组合继承

作者: 凸小布 | 来源:发表于2017-02-26 14:57 被阅读75次

title: 面向对象(八)继承___ 05组合继承 # 文章页面上的显示名
date: # 文章生成时间,一般不改
categories: # 文章分类目录,可省略
- 面向对象
tags: # 文章标签,可省略
- 面向对象
- 基于原型面向对象的继承 # 个数不限,单个可直接跟在 tags 后面


组合继承:原型 + 借用构造函数

01 借用构造函数实现继承:可以获得父构造函数中的实例属性 Person.call(this,name,age)
02 获得原型属性和方法 ( Boy.prototype = Person.prototype)

<script>

    function Person(name,age){
        this.name = name;
        this.age = age;
    };
    Person.prototype.des = "描述信息";
    Person.prototype.logDes = function(){
        console.log(this.des);
    };

    function Boy(bookName,name,age){
        this.bookName = bookName;
        //Person.call(this,"悟空",600);  //借用构造函数
        Person.call(this,name,age);
    }

    //设置原型继承
    //Boy.prototype = new Person();
    Boy.prototype = Person.prototype;

    //创建对象
    var boy = new Boy("水煮三国","悟空",600);
    var boy02 = new Boy("大话西游","云风",40);
    console.log(boy);
    console.log(boy02);
    boy.logDes();

    var p1 = new Person();
    p1.logDes();

    Boy.prototype.des = "描述信息-bOY";
    boy.logDes();
    p1.logDes();
</script>

存在问题:原型共享带来的问题

Boy.prototype = Person.prototype 这是一个赋值操作,会把右边的地址复制一份给左边,指向内存中的同一块数据,一个原型对象的属性和方法,对另外一个也会有影响

解决方案:

01借用构造函数,可以获得实例父构造函数的实例属性
02通过深拷贝,把原型对象上面的属性和方法拷贝一份,复制给子对象,即拥有了属性和方法,也不共享了

相关文章

  • 面向对象(八)继承___ 05组合继承

    title: 面向对象(八)继承___ 05组合继承 # 文章页面上的显示名date: # 文章生成...

  • js的继承

    面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...

  • 【python面试指北】3.类和面向对象

    面向对象编程 封装、继承、多态 组合与继承 优先使用组合(has a)而非继承(is a) 类变量和实例变量的区别...

  • Java-继承

    继承 继承(inheritance)是面向对象的重要概念。继承是除组合(composition)之外,提高代码重复...

  • 学习笔记-为何说多用组合少用继承

    在面向对象的编程中,有一条非常经典的设计原则:组合优于继承,多用组合少用继承。什么不推荐使用继承?组合比继承有哪些...

  • 2.1.1 Python面向对象三大特性

    点击跳转笔记总目录 Python面向对象三大特性 1,继承 1,继承和组合 组合 继承 2,封装 2.0 私有变量...

  • python的面向对象

    python的面向对象(ObjectOriented,OO)-面向对象编程-基础-公有私有-继承-组合,Minxi...

  • 面向对象(七)组合优于继承?

    组合优于继承,多用组合少用继承。 1、为什么不推荐使用继承? 继承是面向对象的四大特性之一,用来表示类之间的 is...

  • 面向对象设计基础&原则

    面向对象设计基础 抽象 封装 继承 多态 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程

  • 继承

    继承(inheritance)是面向对象的重要概念。继承是除 组合(composition)之外,提高代码重复可用...

网友评论

      本文标题:面向对象(八)继承___ 05组合继承

      本文链接:https://www.haomeiwen.com/subject/mobowttx.html