第六章 面向对象的程序设计

本文主要是根据《JavaScript高级程序设计》摘抄学习而成。
6.1 理解对象
两种属性:数据属性和访问器属性。特性:描述属性的各类特征,是为了实现JavaScript引擎用的,不能直接访问。函数

  • 数据属性,有4个特性:学习

  • [[Configurable]]:表示可否经过 delete 删除属性从而从新定义属性,可否修改属性的特性,可否把属性修改成访问器属性。this

  • [[Enumerable]]:表示可否经过 for-in 循环返回属性。prototype

  • [[Writeable]]:表示可否修改属性的值。设计

  • [[Value]]:包含这个属性的数据值。指针

  • 访问器属性,有4个特性: [[Configurable]]:表示可否经过 delete 删除属性从而从新定义属性,可否修改属性的特性,可否把属性修改成数据属性。对象

  • [[Enumerable]]:表示可否经过 for-in 循环返回属性。继承

  • [[Get]]:在读取属性时调用的函数。ip

  • [[Set]]:在写入属性时调用的函数。原型链

定义及读取特性:Object.defineProperty()、Object.defineProperties()、Object.getOwnPropertyDescriptor()
6.2 建立对象

  • 工厂模式:虽然解决了建立多个类似对象的问题,但却没有解决对象识别的问题。
  • 构造函数模式(构造函数应该以大写字母开头)
    构造函数模式这种方法会经历4个步骤:
    1. 建立一个新对象
    2. 将构造函数的做用域赋给新对象(this指向这个新对象)
    3. 执行构造函数中的代码(为新对象添加属性或方法)
    4. 返回新对象
      构造函数的问题:每一个方法都要在每一个实例上从新建立一遍。
  • 原型模式:每一个函数都有一个 prototype 属性,这个属性是一个指针,指向一个对象(函数的原型对象),这个对象包含能够由该类型的全部实例共享的属性和方法。
    • 理解原型对象:
    • 只要建立一个新函数,就会根据一组特定的规则为该函数建立一个 prototype 属性,指向原型对象
    • 默认全部原型对象都会得到一个 constructor 属性,指向 prototype 属性所在函数
    • 调用构造函数建立新实例后,实例将有一个 proto 属性,指向构造函数的原型对象,指针叫[[Prototype]],默认原型指向Object
    • 实例与构造函数没有直接关系
    • 读取属性:搜索先从对象实例自己开始,若是没找到,搜索原型对象
    • 使用 isPrototype() 来检测构造函数和实例之间是否有关系
    • 使用 hasOwnProperty() 来检测属性存在于实例中仍是原型中

6.3 继承

  1. 最经常使用的继承:组合继承。融合了原型链和构造函数的优势。
  2. 原型式继承:能够在没必要须先定义构造函数的状况下实现继承,其本质是执行对给定对象的浅复制。而复制获得的副本还能够获得进一步改造。
  3. 寄生式继承
  4. 寄生组合式继承
相关文章
相关标签/搜索