装饰者模式

15 阅读1分钟

装饰者模式

目的

在不修改原代码或者尽量不修改原代码的前提下,对代码进行扩展。

场景

在接手已经写好的老代码,或者第三方代码时,需要基于原功能增加新功能。

示例代码

// 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站 三十的前端课