主要就是两个函数,在Function的原型上加上before与after,作用就是字面的意思,在函数的前面或后面执行,相当于无侵入把一个函数插入到另一个函数的前面或后面,应用得当可以很好的实现代码的解耦,js中的代码实现如下:
Function.prototype.before = function (fn) {
let that = this;
return function (...params) {
fn.apply(this, params)
return that.apply(this, params)
}
}
Function.prototype.after = function (fn) {
let that = this;
return function (...params) {
let result = that.apply(this, params)
if (result === false) {
return
}
fn.apply(this, params)
return result
}
}
应用的一些例子:
- 为window.onload添加方法,防止window.onload被二次覆盖
- 无侵入统计某个函数的执行时间
- 表单校验
- 统计埋点
- 防止csrf攻击