`
onedear
  • 浏览: 68992 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

aop在js的实现

阅读更多

由于功能上的需求,需要在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/

0
1
分享到:
评论

相关推荐

    AOP基本功能在JavaScript中的研究和实现.pdf

    "AOP基本功能在JavaScript中的研究和实现" 随着Web2.0时代的到来,Web应用的规模和复杂度不断增加,对应的JavaScript软件也变得越来越复杂。因此,有必要对JavaScript软件编程方法进行研究。本文首先对JavaScript ...

    AOP面向切面编程的JavaScript实现

    在JavaScript中实现AOP还可以借助第三方库,如`aspectjs`或`aop-js`。这些库提供了一套API,用于定义切面、通知(advises,如前置通知、后置通知、环绕通知等)和连接点(join points)。这些库可以帮助开发者更...

    基于js的简易aop框架

    本项目创建了一个简单的AOP框架,用于理解这一概念在JavaScript中的实现。 【描述】:虽然描述为空,但从标题可以推断,这个项目提供了一个基于JavaScript的AOP实现,可能是通过创建一种机制来定义和应用切点...

    JavaScript中AOP的实现与应用

    在JavaScript中实现AOP,可以通过不同的方式来完成。文中提到了三种通知类型,分别是前置通知(before)、后置通知(after)、环绕通知(around)。它们的作用如下: 1. 前置通知(before):在方法执行之前执行的...

    使用AOP改善javascript代码

    在JavaScript中,AOP同样能够提供代码重构、增强模块间解耦、代码复用等优点。下面将根据文档提供的内容,详细解释在JavaScript中如何使用AOP来改善代码。 1. 防止window.onload被二次覆盖 在JavaScript中,window....

    AOP编程技术分享

    AOP编程技术分享,包括iOS和javascript等多个平台实现

    javascript _aop

    在实际开发中,为了实现更复杂的 AOP 功能,还可以使用一些库,如 `aspect.js` 或 `aop-js`,它们提供了更丰富的功能,如切点(Pointcut)选择、通知(Advice)类型(前置通知、后置通知、异常通知等)以及编织...

    ext进销存aop ioc ef

    从描述和标签来看,这个项目可能是在开发一个基于EXT JS的进销存管理系统,并利用AOP和IOC的思想来设计其架构,同时借助Entity Framework来处理数据库操作。文件名列表中的“微信截图”和“微信图片”可能包含的是...

    JavaScript实现AOP详解(面向切面编程,装饰者模式)

    JavaScript实现AOP的思路? 通常,在 JavaScript 中实现 AOP,都是指把一个函数“动态织入”到另外一个函数之中,具体的实现技术有很多,下面我用扩展 Function.prototype 来做到这一点。请看下面代码:

    ssh_full.zip_AOP java_aop_backbone jsp_backbone struts_ssh

    在描述中提到的"AOP java_aop_backbone",这可能指的是在Java环境中使用AOP技术,并且可能与Backbone.js这个JavaScript库有关。Backbone.js是一个轻量级的MV*框架,用于构建富前端应用。然而,通常Backbone.js与后端...

    基于springboot+mvc+freemarker+aop实现校友信息管理系统.zip

    在这个校友信息管理系统中,我们可能需要在用户访问特定接口时进行权限验证,这时可以利用AOP实现。通过`@Aspect`、`@Before`、`@After`等注解,我们可以定义切面、通知和切入点表达式,实现代码的解耦。 5. **项目...

    springboot +mvc+ freemarker +aop实现校友信息管理系统,加日志信息查看.zip

    《基于SpringBoot、MVC、Freemarker与AOP实现校友信息管理系统,加日志信息查看》 在当今信息化时代,构建一个高效、便捷的信息管理系统是至关重要的。本项目实践了利用Java技术栈,特别是SpringBoot、MVC、...

    javascript AOP 实现ajax回调函数使用比较方便

    给出的代码实现了一个简单的AOP装饰器模式,用于在方法执行前后插入额外的行为。装饰器模式是一种设计模式,它可以动态地给一个对象添加一些额外的职责,使得我们可以将关注点分离,保持代码的整洁和可扩展性。 ...

    基于C#语言的SD.AOP组件设计与实现源码

    该项目是一款基于C#语言的SD.AOP组件设计源码,包含477个文件,涵盖189个CSS文件、132个PNG图像、48个C#源文件、41个JavaScript文件、16个GIF图像、13个项目文件、12个转换文件、8个C#页面文件、3个压缩文件、2个...

    JavaScript实现的相册

    本项目是一个使用JavaScript实现的相册,旨在提供一种动态、直观的方式来展示和浏览图片。以下将详细介绍这个JavaScript相册的实现原理和相关知识点。 1. **DOM操作**:JavaScript通过Document Object Model(DOM)...

    商城系统源码,技术(Spring MVC AOP)+MyBatis+Ajax+JavaScript

    本文将详细解析标题和描述中提到的“商城系统源码”,以及其技术栈Spring MVC、AOP、MyBatis、Ajax和JavaScript,并结合文件名称"shop",探讨这些技术在构建一个商城系统中的应用。 首先,商城系统是电子商务平台的...

Global site tag (gtag.js) - Google Analytics