JavaScript面向切面编程
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()中的逻辑,去做一些额外的事。
还没有评论,来说两句吧...