原型设计模式指的是创建对象的一种方式,该设计模式用于创建重复的对象,减少了创建对象的代价且提高了代码运行效率,也可以说是创建对象的最佳方式。
原型设计模式的关键在于克隆,也可以说基于已创建好的对象,进行克隆出来一个新的对象。我们也可以对克隆出来的新对象进行修修改改,而不用在从头再来创建新对象并进行配置。
原型设计模式在业务中常用于页面有很多焦点图的功能,由于焦点图功能相似,此时我们就可以采用该设计模式,在生活中我们所常见的,复印某些纸质文档,复印自己的简历,这都属于原型设计模式
原型设计模式的实现的关键点在于对原型链的掌握
原型链
这里我们要注意的是:
- 引用数据类型的所拥有的是隐式原型,属性名是__proto__,属性值是一个对象,指向的是它构造函数的prototype
- 函数所拥有的是显式原型,属性名是prototype,属性值是一个对象,引用数据类型没有prototype这个属性
什么叫做原型链
当我们去访问对象的某个属性或者方法时,它会现在对象自身进行查找该属性,如果自身未找到,则会去自身的__proto__进行查找(也就是它构造函数的prototype),如果还没有找到就会去构造函数的prototype的__proto__中查找,如果查找不到则会返回undefined,函数查找也是如此,不过自身的属性为prototype而不是__proto__,这样的查找机制类似于链条,因为是原型,所以叫做原型链
我们来用原型设计模式做一个小案例,我们对于常用的书籍进行复印,先声明一个类,这个类是我们所拥有的书籍
class Book { constructor(bookName) { this.bookName = bookName; } getName() { console.log(new Date()+'书籍名称为:', this.bookName); } } 复制代码
我们声明一个复印书籍类,这个类通过一个方法进行打印我们所拥有的书籍
class Copier{ constructor(proto){ this.proto=proto; } clone(){ return new Book(this.proto.bookName); } }
获取到我们现在所拥有的书籍进行打印
const jsBook=new Book('JavaScript第四版'); jsBook.getName(); const jsBookCopy=new Copier(jsBook); const jsBookClone=jsBookCopy.clone(); jsBookClone.getName()
原型设计模式在我们需要的数据和已有的数据相似度极高的时候,我们可以对其进行克隆,减少了创建新对象的高成本
坚持努力,无惧未来!