JS 代理模式实践

背景

最近在工作中遇到了需要对Module中导出的方法统一做预处理,在特殊场景下需要增加阻断执行并提示开发者不应该在该场景中使用该方法的提示。

思考

这里一开始的想法其实是在每个方法的入口分别增加一个阻断的判断逻辑:

如果只有一两个方法其实这么做倒还好,但现在的问题是,我手上有30多个方法都要加这个阻断逻辑,手搓阻断逻辑实在是太傻逼了,这么加不知道得加到猴年马月去。

后面我又看到Module的export default,想着能不能在这里做一下文章。

研究了一下之后,其实还是可以搞的,大致思路如下:

在ES6中,javascript引入了代理函数,从而实现对象基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)[1]。通过利用其拦截的特性,我们可以借此在module上实现代理模式。在外部函数获取method的时候做一些特殊逻辑。

实现

通过该方法,我们可以优雅的在module层面对method进行统一的前置操作(比如数据上报、逻辑阻断等操作),提升开发效率的同时还能使得代码更加简洁易维护。

兼容性

通过查阅caniuse,可以说这个接口已经100%兼容可用了。另外由于ES5的特殊性,Proxy是没有完整支持的polyfill的,因此如果碰到实在不兼容的用户,就积极引导用户去升级机器吧,没必要去钻这个牛角尖。

Android外网基本上只有电视盒子还是在4.4.4,手机几乎找不到4.0的机器,就算有看着0.08%的用户占比感觉可以直接忽略了。

[日常碎碎念] 周末打卡COA

缘起🏠

师弟这个月开始在深圳实习了,刚好他也可以喝酒,终于有酒搭子,能陪我去香港打卡心心念念的COA了。

特色🌺

COA是一家主打龙舌兰作为基酒的酒吧,正如其特点,COA的名字其实就是意指收割龙舌兰所用的类似于铲子的农具,店里各处都充斥着龙舌兰的装饰,加上墨西哥风格的BGM,特别有喝酒的氛围。

奖项🏆

#1 Asia’s 50 Best Bars 2022 by 50 best bars

#1 Asia’s 50 Best Bars 2021 by 50 best bars

#7 The World’s 50 Best Bars 2021 by 50 best bars

#8 The World’s 50 Best Bars (Highest Climber) 2020 by 50 best bars

酒水🍷

这次去主要喝了两杯酒:

1. Three Salt Magarita

Three Salt Magarita

来到主打龙舌兰作基酒的酒吧,怎么能够不喝Magarita呢?COA比较有趣的其实是盐的部分,这里使用了三种盐:海盐、虫盐和蚯蚓盐,海盐就是经典风味,虫盐和蚯蚓盐主要的区别是有一点点的烟熏味,还挺好喝的,主打的就是一个猎奇。

2. Smacked Cucumber Salad

Smacked Cucumber Salad

顾名思义,就是通过酒水在口腔中复刻了一道拍黄瓜。入口先是酸,随后是黄瓜的清香,接着是点睛之笔的麻油味与香菜味,最后才是Tequila的酒味,酸咸辣香,四种味道融合的非常棒,特别惊喜的一款特调。

零食🥔

附赠的零食是一碗品客的洋葱奶酪薯片,特别酥脆,搭配Smacked Cucumber Salad回味无穷。

服务💁

无论是Bartender还是Waiter都支持普粤英三种语言的交流,扬手即响应,不会因为你只讲普通话就给臭脸你看,秒杀外面一众香港餐厅。酒水出品飞快,即使只有2个bartender,我们的酒水在10分钟内就能给到👍。

不过最好是懂英文去,不然连最基础的特调酒单可能都会看的一头雾水。(搞不懂为啥不整一个中文备注,全英文看着着实有点费力)我去的那天外场有个应该是土耳其裔的Waiter只会说英文,这种时候如果不会英文的话就只能找其他服务员了。

价格💵

120HKD/杯+10%服务费

说实话不便宜,但在香港港岛这边其实就还好,不算很离谱,算是物有所值。

总结

如果不用排队或者第二轮就能进去(排队1小时内),我还是很愿意经常去的,毕竟真的很好喝,但超过一个小时,感觉就完全没必要了,换别的喝喝其实也不错。