JavaScript 常见设计模式----原型模式

73 阅读1分钟

1.注意事项

  • 原型模式不常用,但原型链是JS基础,必须掌握
  • 属性描述符日常不会直接使用,但它是理解对象属性的重要基础

2.原型模式介绍

  • UML类图

image.png

  • 代码演示
class CloneDemo {
    name = 'clone demo'
    clone():CloneDemo {
        return new CloneDemo()
    }
}

3.原型和原型链

原型

  • 函数(class)都有显示原型prototype
  • 对象都有隐式原型__proto__
  • 对象__proto__指向其构造函数的prototype
class Foo {
  name: string
  age: number
  constructor(name: string,age:number) {
    this.name = name;
    this.age = age
  }
  getName () {
    return this.name
  }
}

const f2 = new Foo('李四',21)
console.log(Foo.prototype);
console.log(f2.__proto__);
console.log(Foo.prototype === f2.__proto__); //true

原型链

image.png

4.使用场景

  1. Object.create

image.png

5.基础必备---对象属性描述符

  1. value
  • 定义属性值
  • 没有value,则看不到对象属性
  • 但可以通过get set来操作属性值
  1. configurable
  • 是否可以delete删除,并重新定义
  • 是否可以修改其他属性描述符
  • 是否可以修改get set
  1. writable
  • 属性值是否可以被修改
  • 对比Object.freeze() “冻结”
  • 对比Object.seal() "密封"
  1. enumerable
  • 是否可以通过for...in遍历
  • 对比for...of(迭代器模式)