js Aop

1 篇文章 0 订阅
1 篇文章 0 订阅

js Aop


代码如下 不多做解释

Document
 <input onclick="Person(1,'frdfdxfd')" type="button" value="测试"/>
  <script type="text/javascript">
		function Person(a,c){
			 
				console.log("我的名字叫做,"+c+"专注于...");
		   return false;
		}
		
  
		(function() {
			//AOP(面向切面编程)的javaScript实现
			jsAOP = {
				/**
				 * target 切入的目标对象
				 * method 切入的目标函数(相对于target)
				 * advice 切入点执行函数
				 * **/
				before:function(target,advice){
					//备份原函数
					var original  = target;
					target = function(){
						var rel = advice(arguments);
						if(!rel&&rel!=undefined){
							return false;
						}
  
						return original.apply(target, arguments);
						
							
						
					};
					return target
				},
				after:function(target,advice){
					var original  = target;
					target = function(){
							
					   var rel =original.apply(target, arguments);
				 
					  
					return advice(rel);
					};
					return target
				},
				around:function(target,advice){
					var original  = target;
					target = function(){
					   var rel = advice(arguments);
						if(!rel&&rel!=undefined){	
								return false;
						}
						rel = original.apply(target, arguments);
						return advice(rel);
					};
					return target
				}
			};
		}());
		
  
  
		
		window.onload = function(){
			// around 可以替代 before after,建议最好不要同时使用
  
		   //before可以获取参数 拦截方法执行 可以给参数赋值
			Person = jsAOP.before(Person,function(parameter) {
				console.log("请你介绍一下自己!");
			parameter[1]="ccccccccc";
			
			});
			//after获取方法返回值
			Person = jsAOP.after(Person,function(rel) {
				alert(rel)
				console.log("嗯,不错,明天来上班吧!");
				return 1;
			});
			//around可以获取参数 拦截方法执行 获取方法返回值
			Person = jsAOP.around(Person,function(data) {
				var index = -1;
				return function(data) {
					index++;
					if(index == 0) {
						alert(data);
						console.log("介绍开始!");
						
					}else{
						alert(data);
						console.log("介绍结束!");
						index = -1;
					}
				};
  
			}());
  
  
			
			
		};
  
  </script> 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值