1.注意事项
- 原型模式不常用,但原型链是JS基础,必须掌握
- 属性描述符日常不会直接使用,但它是理解对象属性的重要基础
2.原型模式介绍
- UML类图
- 代码演示
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
原型链
4.使用场景
- Object.create
5.基础必备---对象属性描述符
- value
- 定义属性值
- 没有value,则看不到对象属性
- 但可以通过get set来操作属性值
- configurable
- 是否可以delete删除,并重新定义
- 是否可以修改其他属性描述符
- 是否可以修改get set
- writable
- 属性值是否可以被修改
- 对比Object.freeze() “冻结”
- 对比Object.seal() "密封"
- enumerable
- 是否可以通过for...in遍历
- 对比for...of(迭代器模式)