装饰者模式
目的
在不修改原代码或者尽量不修改原代码的前提下,对代码进行扩展。
场景
在接手已经写好的老代码,或者第三方代码时,需要基于原功能增加新功能。
示例代码
// Vue2 实现数组方法如push,shift等
data = {
ary:[]
}
const old = Array.prototype.push
data.ary.__proto__.push = function(){
old.apply(this,arguments)
// 更新视图
updateView()
}
// 拓展点击事件 - 点击的同时上报数据
function domFactory(dom,fn){
const old = dom.onclick
old.apply(this,arguments)
typeof fn === "function" && fn()
}
// 利用回调完成代码扩展
// old
function fn(){
axios.get('token').then()
}
// 现在要在获取到token之后验证权限
function fn(callback){
axios.get('token').then(
typeof callback === "function" && callback()
)
}
内容来源为B站 三十的前端课