当前位置: 首页 > 工具软件 > jQuery AOP > 使用案例 >

js Aop

濮嘉茂
2023-12-01

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> 
 类似资料:

相关阅读

相关文章

相关问答