JS也有切面编程,有时间学习一下。毕竟面向切面可以在一些通用处理场景,如日志打印等可以省很多代码。
看个例子:
//通过原型链注入自定义函数 Function.prototype.before = function (beforeFn) { var _self = this; // 保存原函数引用 return function () { // 返回包含了原函数和新函数的‘代理’函数 beforeFn.apply(this, arguments); // 执行新函数,修正this return _self.apply(this, arguments); // 执行原函数 } }; Function.prototype.after = function (afterFn) { var _self = this; return function () { var ret = _self.apply(this, arguments); afterFn.apply(this, arguments); return ret; } }; var obj = { method: function test() { alert("2") } }; obj.method = obj.method.before(function () { alert("1"); }).after(function () { alert("3") }); function startTest() { obj.method(); }
弹出的顺序就是:1 ->2 ->3
js面向切面编程的目的是不改变原有方法test()中的逻辑,去做一些额外的事。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222042.html原文链接:https://javaforall.net
