栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

你了解什么是AOP吗?它的作用是什么?举个例子

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

你了解什么是AOP吗?它的作用是什么?举个例子

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);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382219.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号