Js构造函数与继承.md

作者:Adiana    发布于:

理解概念

对象

工厂模式

使用函数创建对象,封装以待定接口创建对象的细节,函数内部创建对象并return

构造函数模式

构造函数有下面几个优点:

  • 构造函数不显式创建对象
  • 不直接返回
  • 使用this
  • 函数名首字母大写
  • 使用关键字new创建实例
    缺点:对象内部的函数会重复被实例化,造成浪费

    原型模式

    prototype

原型模式被不同的实例实例化之后仍然指向同一对象——共享

缺点:原型模式的缺点也是由于其共享性带来的,对象内容的改变会使所有的实例都受影响

动态原型模式

可以通过 函数名.prototype.对象名 动态添加对象

寄生构造函数模式

带上构造函数名字、使用new声明的“工厂模式”,不推荐使用


继承

OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,实现继承继承实际的方法

构造函数、原型、实例的关系:每个构造函数都有一个原型对象,原型对象包括一个指向构造函数的指针、实例都包括一个指向原型内部的指针

原型链

原型链有下面几个特点:

  • 原型链的构成是一个类型的原型对象等于另一个类型的实例,从而构成原型链
  • 原型链的根节点都是Object,其中包含很多默认方法
  • 可以重写方法
  • 不能通过字面量的方法定义新方法,这样会导致链的断裂

原型链的缺点:

  • 共享
  • 不能给超类型构造函数传递参数(借用构造函数可以传入参数,call/aplly)

所以一般不单独使用原型链

ps:区分实例属性与原型方法

组合继承(伪经典继承)

借用原型链和构造函数的优点,让不同的实例既可以拥有自己的属性,又可以共用方法。

1
2
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;

⚠️注意第二行

原型式继承

多个对象从一个原型得到继承(待更新)

寄生式继承

寄生式继承与原型式继承紧密相关,在原型式继承的基础上增强对象

寄生组合式继承

寄生组合式继承可以减少一次调用SuperType()并且能实现相同的效果

format_list_numbered

(无)

  1. 1. 对象
    1. 1.1. 工厂模式
    2. 1.2. 构造函数模式
    3. 1.3. 原型模式
    4. 1.4. 动态原型模式
    5. 1.5. 寄生构造函数模式
  2. 2. 继承
    1. 2.1. 原型链
    2. 2.2. 组合继承(伪经典继承)
    3. 2.3. 原型式继承
    4. 2.4. 寄生式继承
    5. 2.5. 寄生组合式继承
vertical_align_top

Copyright © 2017 sin7777(willa)

Powered by Hexo && Theme - Vateral