AOP是面向切面编程,相对于面向对象编程,面向对象是将需求分为了不同的类并有着自己独立的行为,而面向切面编程就是将通用需求从不同的类不同的行为中提取出来很多个类共享一个功能(比如实例中的输入数据检查),一旦发生变化,修改这个行为即可而不用修改很多个类。
例子
AOP方法
// AOP工厂
var aopFactory = function(before, after){
// 构造方法,在原方法前后增加执行方法
function constructor(originFun){
function $_class(...data){
var result;
proxy.before(data);
result = originFun.apply(this, data);
proxy.after(data);
return result;
}
return $_class;
}
var proxy = {
// 添加被代理方法,参数a为被代理方法,参数b为目标对象
add : function(a, b){
var funName;
// 判断参数a类型,可以为方法或方法名
if(typeof a == "function"){
funName = a.name;
}else if(typeof a == "string"){
funName = a;
}else{
return;
}
// 不传对象时默认为window对象
b = b || window;
if(typeof b == "object" && b[funName]){
// 用$_class替换原方法
b[funName] = constructor(b[funName]);
}
},
// 默认before为空方法
before : function(){},
// 默认after为空方法
after : function(){}
}
// 注入特定的前后处理方法
if(typeof before == "function"){
proxy.before = before;
}
if(typeof after == "function"){
proxy.after = after;
}
return proxy;
}
实例代码
let checkProxy;
// 验证参数是否为数字
function checkNumber(...data){
var i, length;
for(i=0, length=data[0].length; i<length; i++){
if(typeof data[0][i] != "number")
console.log(data[0][i] + "不是数字");
}
}
// 将checkNumber方法作为前置通知,生成验证参数是否为数字的构造器
checkProxy = aopFactory(checkNumber);
// 加法
function Add(a,b){
return a+b;
}
// 减法
function Minus(a,b){
return a-b;
}
// 为加减法生成验证参数是否为数字的代理方法
checkProxy.add(Add);
checkProxy.add(Minus);
本文向大家介绍你了解css3的currentColor吗?举例说明它的作用是什么?相关面试题,主要包含被问及你了解css3的currentColor吗?举例说明它的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 currentColor是 color 属性的值,具体意思是指:currentColor关键字的使用值是 color 属性值的计算值。如果currentColor关键字被应用在 c
本文向大家介绍你有了解Rxjs是什么吗?它是做什么的?相关面试题,主要包含被问及你有了解Rxjs是什么吗?它是做什么的?时的应答技巧和注意事项,需要的朋友参考一下 RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extra
本文向大家介绍你有用过bdo标签吗?举例说明它的作用是什么?相关面试题,主要包含被问及你有用过bdo标签吗?举例说明它的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 含义:覆盖标签内文本的显示方向 是一个行内元素 有一个属性dir,两个值: ** : right to left(默认) ** : left to right
本文向大家介绍你了解什么是高阶组件吗?可否举个例子说明下?相关面试题,主要包含被问及你了解什么是高阶组件吗?可否举个例子说明下?时的应答技巧和注意事项,需要的朋友参考一下 https://blog.csdn.net/z609373067/article/details/81258966
本文向大家介绍什么是 Swagger?你用 Spring Boot 实现了它吗?相关面试题,主要包含被问及什么是 Swagger?你用 Spring Boot 实现了它吗?时的应答技巧和注意事项,需要的朋友参考一下 Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框
本文向大家介绍你知道什么是锚点吗?它的作用是什么?怎么创建一个锚点?相关面试题,主要包含被问及你知道什么是锚点吗?它的作用是什么?怎么创建一个锚点?时的应答技巧和注意事项,需要的朋友参考一下 这里name="ss" 的a标签、id="ss" 的任意标签都是锚点,简单创建用id就可以,绝大多数标签又可以有id属性,而name仅在a标签中才可以作为锚点