函数的继承

继承

面向对象开发: 封装 继承 多态
面向对象开发: 封装 继承 多态

封装:
一、函数方式
二、闭包的方式
三、对象的方式 (面向对象)
1、工厂模式
2、构造函数模式
3、原型模式
4、混合模式(构造函数+原型)

多态:多态是指一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的引用,来调用在不同子类中实现的方法
es5的继承的方式 推荐 es6 的 class
es5 类: 构造函数
es6 定义类: class
定义class , 生成实例化对象时依然通过new关键字调用, class的本质是函数

  1. 构造函数继承:
    实现核心方式:需要在子类中通过 调用函数对象的call() 和 apply() 方法实现 Animal.call(this)

    优点:可以继承父构造函数中所有的属性和方法(私有的)
    缺点:没有办法继承父构造函数原型对象上的属性和方法(共有的)

  2. 原型对象继承 :
    实现核心方式:子类的 prototype 属性 指向父类的实例化对象 Cat.prototype = new Animal()
    优点:继承父构造函数原型对象上的属性和方法(共有的)
    缺点:
    修改了子类的原型对象的 constructor 指向 , 需要手动修改 Cat.prototype.constructor = Cat;
    所有新实例都会共享父类实例的属性 , 一个实例对象修改了父类的方法和属性,则其他实例全部改变

  3. 构造函数 + 原型对象继承 *****************

  4. 拷贝继承 : 拷贝的是原型对象上的属性和方法

  5. 寄生式继承

  6. 组合寄生式继承
    **实例对象的私有属性 也可以在类的最顶部定义
    static 关键字 静态属性 不会被实例对象继承, 是类的属性, 需要通过 类本身来获取(访问)

    实例对象的属性也可以在constructor 中定义**

原型链

:原型本质的是 通过__proto__属性

直白的描述:
调用实例化对象的一个属性或者方法时,首先会在自身查找, 找到了则调用,如果找不到, 则会沿着实例化对象的__proto__属性去原型对象上查找,如果找到则使用,如果没有,则原型对象也有 __proto__属性,继续向上查找, 直到找到原型链的顶端 (null),有则用,没有报错; 最终通过 __proto__属性找到的所有的原型对象串起来形成了原型链

原型链概念:
每个实例化对象都具有一个原型链指针__proto__,该指针指向创建它的函数对象的原型对象,而上一层的原型对象的结构依然类似,有自己的原型链指针,指向创建它的函数对象的原型对象。这样利用__proto__一直指向Object的原型对象上,而Object的原型对象用Object.proto = null表示原型链的最顶端。这样由一系列__proto__串起来的原型对象就构成了原型链。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值