【转】面向切面编程-AOP,挺有用的
原文:http://blog.csdn.net/yangzhihello/article/details/40377399
下面的代码有点问题,
ins[methodName] = function(){
callback.apply(ins,arguments)
return method.apply(ins,arguments);
}
这段也要放到上面的if 语句块里面去!!!
补充, 通过后面一片aop的文章的理解,我发现,这里的aop的实现方式,会改变原有函数的行为,这种貌似不大好。但是,后面一篇的方式在Function.prototpye上面的方式,好像也不大好。
-------------------------------------------------------------------------------------------------------------------
对于java中的aop,早有耳闻,所谓面向切面编程,不过一直都以为只是在后台才会用到。
从做前端开始就没有这方面的需求,这一次对于一些东西做新的想法,发现有些东西还是可以去考虑考虑的。
有一个公用的代码,可能在很多地方都会被用到,那么现在要做的就是,需要这个方法跑起来之前走一些东西,在这个方法跑完之后,还在处理一些东西。
那么问题就来了:
1 直接改之前封装好的东西,Ok,可以没问题,但是这样做了之后,别处用到这个东西的地方就直接崩溃了!
2 那么如果采用直接复制一份代码,修改单个这一处的问题,ok,没有问题,但是这不也就是代表着代码冗余越来越多。
这个时候想起了,在java里面有一个东西,面向切面,添加切点,一切似乎就可以正常的跑起来了。是的,就这么干.....
如下:
由于是工具类,无需实例化,刚直接可以采用{}对象方式:
- aop = window.aop || {};
 - aop = {
 - doBefore:function(ins,methodName,callback){
 - if(typeof ins[methodName] != "undefined"){
 - var method = ins[methodName];
 - }
 - ins[methodName] = function(){
 - callback.apply(ins,arguments)
 - return method.apply(ins,arguments);
 - }
 - },
 - doAfter:function(ins,methodName,callback){
 - if(typeof ins[methodName] != "undefined"){
 - var method = ins[methodName];
 - }
 - ins[methodName] = function(){
 - var ret = method.apply(ins,arguments),
 - callret = callback.apply(ins,arguments);
 - return typeof callret == "undefined" ? ret : callret;
 - }
 - }
 - }
 
html 中测试如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 - <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 - <head>
 - <script type="text/javascript" src="aop.js"></script>
 - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 - <title>aop javascript</title>
 - </head>
 - <body>
 - <script type="text/javascript">
 - //json对象
 - var obj = {
 - run:function(){
 - console.log("run");
 - },
 - init:function(name){
 - console.log("arguments : " + name);
 - return "info";
 - }
 - };
 - aop.before(obj,"run",function(){
 - console.log("run before");
 - });
 - aop.after(obj,"run",function(){
 - console.log("run after");
 - });
 - console.log("<!-----json对象--------->");
 - obj.run();
 - var F = function(){};
 - F.prototype = {
 - run:function(){
 - console.log("prototype run");
 - }
 - };
 - //创建对象
 - console.log("<!-----创建对象--------->");
 - var f = new F();
 - aop.before(f,"run",function(){
 - console.log("prototype run before");
 - });
 - aop.after(f,"run",function(){
 - console.log("prototype run after");
 - });
 - f.run();
 - //参数问题
 - console.log("<!-----参数问题--------->");
 - aop.before(obj,"init",function(name){
 - console.log("arguments before :" + name);
 - });
 - aop.after(obj,"init",function(name){
 - console.log("arguments after :" + name);
 - return "next";
 - });
 - console.log(obj.init("user"));
 - </script>
 - </body>
 - </html>
 
这里多种情况,包括参数的传递问题,皆有考虑!
偶有所得,以记录之,谨防忘记!
【转】面向切面编程-AOP,挺有用的的更多相关文章
- Spring框架学习笔记(2)——面向切面编程AOP
		
介绍 概念 面向切面编程AOP与面向对象编程OOP有所不同,AOP不是对OOP的替换,而是对OOP的一种补充,AOP增强了OOP. 假设我们有几个业务代码,都调用了某个方法,按照OOP的思想,我们就会 ...
 - 设计模式之面向切面编程AOP
		
动态的将代码切入到指定的方法.指定位置上的编程思想就是面向切面的编程. 代码只有两种,一种是逻辑代码.另一种是非逻辑代码.逻辑代码就是实现功能的核心代码,非逻辑代码就是处理琐碎事务的代码,比如说获取连 ...
 - Spring学习手札(二)面向切面编程AOP
		
AOP理解 Aspect Oriented Program面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 但是,这种说法有些片面,因为在软件工程中,AOP的价值体现的并 ...
 - Spring学习笔记:面向切面编程AOP(Aspect Oriented Programming)
		
一.面向切面编程AOP 目标:让我们可以“专心做事”,避免繁杂重复的功能编码 原理:将复杂的需求分解出不同方面,将公共功能集中解决 *****所谓面向切面编程,是一种通过预编译方式和运行期动态代理实现 ...
 - Spring之控制反转——IoC、面向切面编程——AOP
		
控制反转——IoC 提出IoC的目的 为了解决对象之间的耦合度过高的问题,提出了IoC理论,用来实现对象之间的解耦. 什么是IoC IoC是Inversion of Control的缩写,译为控制 ...
 - 【串线篇】面向切面编程AOP
		
面向切面编程AOP 描述:将某段代码“动态”的切入到“指定方法”的“指定位置”进行运行的一种编程方式 (其底层就是Java的动态代理)spring对其做了简化书写 场景: 1).AOP加日志保存到数据 ...
 - 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制
		
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
 - [译]如何在ASP.NET Core中实现面向切面编程(AOP)
		
原文地址:ASPECT ORIENTED PROGRAMMING USING PROXIES IN ASP.NET CORE 原文作者:ZANID HAYTAM 译文地址:如何在ASP.NET Cor ...
 - Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)
		
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...
 
随机推荐
- params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render
			
params.row[params.column.key] vue h函数 当前单元格 h函数 div 属性 值或数组 render
 - iview modal 点击打开窗口,打开前先销毁里面的内容再打开
			
<Modal v-model="addSubOrgModal" @on-cancel="addSubOrgCancel" @on-visible-chan ...
 - VC-基础:常用的安全CRT函数
			
常用的安全CRT函数 安全CRT(C Runtime Library = C运行时间库)函数,是微软公司对C/C++语言的扩展.它在原来函数名后添加了“_s”后缀:一般返回出错代码:并将原来的函数返回 ...
 - Fiddler设置显式IP地址
			
打开Fiddler, 菜单栏:Rules->Customize Rules… 或快捷键 Ctrl+R . 通过快捷键 Ctrl+F ,搜索:static function Main() 函数. ...
 - css3新增属性:多列(column)
			
css3多列能够创建多个列来对文本进行布局,就想报纸那样. 关于多列的相关属性及属性值如下: column-count: number|auto;:指定元素应分为的列数.column-fill: 指定 ...
 - POJ-1328-放置雷达
			
这是一道贪心的题目,首先我们要知道,我们放置雷达的话我们可以做一个转换,就是已知岛屿的点坐标的时候,我们可以算一下,这个点以d为半径与x轴交点之间的线段在x轴上的投影,然后我们只需要在这个投影范围内设 ...
 - [CF] 948A Protect Sheep
			
A. Protect Sheep time limit per test1 second memory limit per test256 megabytes inputstandard input ...
 - 移动web touch事件
			
参考:http://www.cnblogs.com/dojo-lzz/p/5452575.html wap中的原生touch 事件,touchstart.touchmove.touchend.touc ...
 - pandas.read_csv 报ssl.SSLError
 - 基于flask的网页聊天室(二)
			
基于flask的网页聊天室(二) 前言 接上一次的内容继续完善,今天完成的内容不是很多,只是简单的用户注册登录,内容具体如下 具体内容 这次要加入与数据哭交互的操作,所以首先要建立相关表结构,这里使用 ...