由于功能上的需求,需要在js的N个方法前执行一些判断代码,M个方法后执行处理代码。如果直接将代码写在具体方法里面增加处理代码,那会导致代码很难维护。对于这个需求,当时想到有2种解决方案。
1.新建一个抽象类,统一入口,然后在入口再分发到具体的方法。但需要对源代码进行不少改动。而且如何分发也是一些问题,如方法参数不一。所以就没坚持这种方案。
2.搬照spring的AOP编程。最后发现是可以实现的。
网上找了一些资料,修改整理了一个util类
/*
aop工具类
onedear 2011-06-10
*/
var AOPUtil = {
/*
className:个人称之为作用域,也可称之为类名
fnName:方法名,字符串类型
beforeFn:before function
*/
before : function (className , fnName , beforeFn) {
if(typeof(className) == 'function')
className = className.prototype ;
if(typeof(className[fnName]) != 'function')
return ;
if(typeof(beforeFn) != 'function')
return ;
var target = className[fnName] ;
className[fnName] = function () {
beforeFn.apply(this,arguments);
return target.apply(this, arguments);
}
},
beforeJudge : function (className , fnName , beforeFn) {
if(typeof(className) == 'function')
className = className.prototype ;
if(typeof(className[fnName]) != 'function')
return ;
if(typeof(beforeFn) != 'function')
return ;
var target = className[fnName] ;
className[fnName] = function () {
var result = beforeFn.apply(this,arguments);
if(!result)
return ;
return target.apply(this, arguments);
}
},
//同上
after : function (className , fnName , afterFn ) {
if(typeof(className) == 'function')
className = className.prototype ;
if(typeof(className[fnName]) != 'function')
return ;
if(typeof(afterFn) != 'function')
return ;
var target = className[fnName] ;
className[fnName] = function () {
var returnValue = target.apply(this, arguments);
afterFn.apply(this,arguments);
return returnValue;
}
}
};
调用sample
function before(){
alert("before");
}
function after() {
alert("after");
}
本人习惯的方法定义有这么几种:
1.handle = {
testHandle : function() {
alert("testHandle");
}
}
则调用方法为
AOPUtil.before(window.handle,"testHandle" , after);
2.function test2() {
alert("test2");
}
则调用方法为:
AOPUtil.before(window,"test2" , before);
3.var t = function(){};
t.prototype.test = function(param1 , param2) {
alert(param1+"_"+param2);
}
则调用方法为:
AOPUtil.before(t, "test" , before);
js还有其他方法定义否?
资料参考:
http://www.w3cschool.cn/pro_js_inheritance_implementing.html
http://zhaohengzhan.blog.163.com/blog/static/255044432010214390711/
分享到:
相关推荐
"AOP基本功能在JavaScript中的研究和实现" 随着Web2.0时代的到来,Web应用的规模和复杂度不断增加,对应的JavaScript软件也变得越来越复杂。因此,有必要对JavaScript软件编程方法进行研究。本文首先对JavaScript ...
在JavaScript中实现AOP还可以借助第三方库,如`aspectjs`或`aop-js`。这些库提供了一套API,用于定义切面、通知(advises,如前置通知、后置通知、环绕通知等)和连接点(join points)。这些库可以帮助开发者更...
本项目创建了一个简单的AOP框架,用于理解这一概念在JavaScript中的实现。 【描述】:虽然描述为空,但从标题可以推断,这个项目提供了一个基于JavaScript的AOP实现,可能是通过创建一种机制来定义和应用切点...
在JavaScript中实现AOP,可以通过不同的方式来完成。文中提到了三种通知类型,分别是前置通知(before)、后置通知(after)、环绕通知(around)。它们的作用如下: 1. 前置通知(before):在方法执行之前执行的...
在JavaScript中,AOP同样能够提供代码重构、增强模块间解耦、代码复用等优点。下面将根据文档提供的内容,详细解释在JavaScript中如何使用AOP来改善代码。 1. 防止window.onload被二次覆盖 在JavaScript中,window....
AOP编程技术分享,包括iOS和javascript等多个平台实现
在实际开发中,为了实现更复杂的 AOP 功能,还可以使用一些库,如 `aspect.js` 或 `aop-js`,它们提供了更丰富的功能,如切点(Pointcut)选择、通知(Advice)类型(前置通知、后置通知、异常通知等)以及编织...
从描述和标签来看,这个项目可能是在开发一个基于EXT JS的进销存管理系统,并利用AOP和IOC的思想来设计其架构,同时借助Entity Framework来处理数据库操作。文件名列表中的“微信截图”和“微信图片”可能包含的是...
JavaScript实现AOP的思路? 通常,在 JavaScript 中实现 AOP,都是指把一个函数“动态织入”到另外一个函数之中,具体的实现技术有很多,下面我用扩展 Function.prototype 来做到这一点。请看下面代码:
在描述中提到的"AOP java_aop_backbone",这可能指的是在Java环境中使用AOP技术,并且可能与Backbone.js这个JavaScript库有关。Backbone.js是一个轻量级的MV*框架,用于构建富前端应用。然而,通常Backbone.js与后端...
在这个校友信息管理系统中,我们可能需要在用户访问特定接口时进行权限验证,这时可以利用AOP实现。通过`@Aspect`、`@Before`、`@After`等注解,我们可以定义切面、通知和切入点表达式,实现代码的解耦。 5. **项目...
《基于SpringBoot、MVC、Freemarker与AOP实现校友信息管理系统,加日志信息查看》 在当今信息化时代,构建一个高效、便捷的信息管理系统是至关重要的。本项目实践了利用Java技术栈,特别是SpringBoot、MVC、...
给出的代码实现了一个简单的AOP装饰器模式,用于在方法执行前后插入额外的行为。装饰器模式是一种设计模式,它可以动态地给一个对象添加一些额外的职责,使得我们可以将关注点分离,保持代码的整洁和可扩展性。 ...
该项目是一款基于C#语言的SD.AOP组件设计源码,包含477个文件,涵盖189个CSS文件、132个PNG图像、48个C#源文件、41个JavaScript文件、16个GIF图像、13个项目文件、12个转换文件、8个C#页面文件、3个压缩文件、2个...
本项目是一个使用JavaScript实现的相册,旨在提供一种动态、直观的方式来展示和浏览图片。以下将详细介绍这个JavaScript相册的实现原理和相关知识点。 1. **DOM操作**:JavaScript通过Document Object Model(DOM)...
本文将详细解析标题和描述中提到的“商城系统源码”,以及其技术栈Spring MVC、AOP、MyBatis、Ajax和JavaScript,并结合文件名称"shop",探讨这些技术在构建一个商城系统中的应用。 首先,商城系统是电子商务平台的...