持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
前言
什么是访问者模式
在我们进行访问者模式的探究之前,先来一起了解一下什么是访问者模式吧。
访问者模式:针对于对象结构中的元素,定义在不改变该对象的前提下访问结构中元素的新方法。
访问者模式的困惑
看完解释之后,你是否是一脸问号呢?
每一个字的意思都可以理解,但是,放到一起之后就感觉不知所云。小编我也是的,我看完之后一脸懵逼,看了一些介绍的资料之后,依然一脸懵逼。
经过一番dome的反复查看,终于有了一点点的理解,这里我们就一起看一下访问者模式。
探索访问者模式
首先我们都知道JavaScript在设计对象的时候,在对象的原型上定义了一个toString的方法,我们可以通过访问toString方法来获取对象的类型。针对所有的数据类型,我们可以通过Object.prototype.toString.call
方法来获取数据的类型返回值,来判断数据的类型,例如:
[object Array] 数组
[object Date] 日期类型
针对于这种行为进行发散一下,我对于操作对象类型的方法进行封装一下。
const Visitor = (function () {
return {
getType(target) {
const type = Object.prototype.toString.call(target);
return type.slice(8, -1);
}
validateType(target, type) {
const type = Object.prototype.toString.call(target);
return type.slice(8, -1) === type;
}
}
})();
对于访问器Visitor,我们添加了两个方法getType、vilidateType。由于这两个方法的内部都是基于Object.prototype.toString.call
方法来操作数据,所以基本上很相似~~(不过,这不是重点)~~。有了这个访问器之后,我们就可以这样来进行数据类型进行操作了。
const today = new Date();
// 获取today的数据类型
const type = Visitor.getType(today);
// today是否是日期类型数据
const isDate = Visitor.validateType(today, 'Date');
结语
针对于访问者模式,我的个人理解是,我们在保证不修改原始对象的前提条件下为它封装新的方法来实现对原始对象的访问。比方说,我们上面的例子中,我们可以使用Visitor方法访问任意数据的数据类型,而对于不同的数据类型我们又可以得到不同的结果。这样的话我们可以根据对象的不同使用场景,封装多种操作方法,来实现多种操作方式。
好了,有关操作模式的内容我们就讲到这里了,希望对大家有所帮助。
欢迎大家在下方进行留言交流。