《JavaScript面向对象精要》读后感

110 阅读2分钟

书是 15 年出了第一版,22 年才开始看,内容比较偏基础,而且内容比较旧,现在已经出了 ES6+了,但里面最新的就是 ES5 相关的内容了,但还是有看的价值的,简单记录下自己已经遗忘或者学到的东西~

可总结:

  1. 如何去创建一个对象?

  2. 如何去遍历对象的属性?

  3. prototype 和 constructor 的区别

  4. 继承的方式有哪些?

学到的东西:

  1. object 属性探测,不要用 if 判断,容易误判,使用 in 操作符 或 hasOwnProperty 方法
    1. in 会检查「自有属性」和「原型属性」
    2. hasOwnProperty 会检查「自有属性」
  2. 遍历对象的属性,可使用 for-in 或 Object.keys
    1. for-in 会同时遍历原型属性
    2. Object.keys 只返回自有属性
  3. 改变属性特征,使用 Object.defineProperty 方法
    1. enumerable:是否可枚举
    2. writable:是否可改写
    3. configurable:是否可配置
  4. 禁止修改对象
    1. 禁止扩展:Object.preventExtensions() 创建一个不可扩展的对象
    2. 对象封印:Object.seal() 不可添加/删除属性,不能改变属性类型,但可以读写属性
    3. 对象冻结:Object.freeze() 不可添加/删除属性,不能改变属性类型,也不能写入任何数据类型
  5. Object.create(null) 可以创建出一个没有原型对象的对象,该对象完全就是一个没有任何预定义属性的白板,这使得它成为一个完美的哈希容器,因为不会发生和继承来的属性名字的冲突。
  6. 子类提供新功能覆盖父类的方法十分常见,但如果还想访问父类的方法该怎么办呢?
    1. 父类.prototype.方法.call(this)
  7. 如何创建私有成员
    1. 模块模式:使用立调函数表达(IIFE)来返回一个对象。意味着这个函数仅存在于被调用的瞬间,一旦执行后立即就被销毁了

      var yourObject = (function(){
      	// private data variables
      	return {
      		// public methods and properties
      	}
      }();
      
    2. 构造函数的私有成员

  8. 混入
  9. 作用域安全的构造函数