`
jusescn
  • 浏览: 125221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javascipt的AOP

    博客分类:
  • ajax
阅读更多

很多实现了,基于jquery和prototype的都有。

http://code.google.com/p/jquery-aop/
http://ajaxian.com/archives/eventobservemethod-more-aop-for-javascript
http://code.google.com/p/ajaxpect

 

PS:基于prototype的http://___.constantology.com/observe_method/  不能访问,提供http://___.constantology.com/download/observe_method/observemethod.js 的缓存内容。

 

Object.extend(Event, {
			AFTER : 'after',
			AROUND : 'around',
			BEFORE : 'before',
			observeMethod : function(scope, method, callback, aspect) {
				scope.listeners = $H(scope.listeners || {});
				if (!scope.listeners[method]) {
					scope.listeners[method] = this.setAspects();
					var __method = scope[method];
					scope[method] = function() {
						Event.dispatchCustomEvent(scope,
								scope.listeners[method].before, arguments);
						Event.dispatchCustomEvent(scope,
								scope.listeners[method].around, arguments);
						var args = $A(arguments);
						var r = __method.apply(scope, arguments);
						args.push(r);
						Event.dispatchCustomEvent(scope,
								scope.listeners[method].around, args);
						Event.dispatchCustomEvent(scope,
								scope.listeners[method].after, args);
						return r;
					}.bind(scope);
				}
				aspect = aspect || this.AFTER;
				if (scope.listeners[method][aspect].indexOf(callback) < 0)
					scope.listeners[method][aspect].push(callback);
			},
			purgeMethodListeners : function(scope) {
				if (arguments.length > 0) {
					if (arguments.length > 1)
						scope.listeners[arguments[1]][arguments[2]] = [];
					else
						scope.listeners[arguments[1]] = this.setAspects();
				} else
					scope.listeners.each(function(listener) {
								listener = this.setAspects();
							}.bind(this));
			},
			stopObserveMethod : function(scope, method, callback, aspect) {
				aspect = aspect || this.AFTER;
				scope.listeners[method][aspect] = scope.listeners[method][aspect]
						.without(callback);
			},
			dispatchCustomEvent : function(scope, events, argv) {
				var args = argv;
				if (events instanceof Array)
					events.each(function(func) {
								func.apply(this, args);
							}.bind(scope));
				else
					events.apply(scope, args);
			},
			setAspects : function() {
				return {
					after : [],
					around : [],
					before : []
				};
			}
		});

 

具体调用:

var myFunc = function() { alert( 'hello world!' ); }; 
var myOtherFunc = function() { alert( 'total annihilation of world is inevitable!' ); }; 
Event.observeMethod( window, 'myFunc', myOtherFunc ); 

var myNewFunc = function() { alert( 'i hate corporatocracies!' ); }; 
var myBeforeFunc = function() { alert( 'yes it\'s true!' ); }; 
Event.observeMethod( window, 'myNewFunc', myBeforeFunc, Event.BEFORE ); 

 

 

分享到:
评论
1 楼 windywany 2009-01-06  
这也叫AOP?

相关推荐

    JavaScript AOP编程实例

    JavaScript AOP(面向切面编程)是一种编程范式,它允许开发者把横切关注点(cross-cutting concerns)从业务逻辑代码中分离出来。在面向对象编程(OOP)中,通常一个对象会处理与其核心功能直接相关的事务,而AOP使...

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

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

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

    JavaScript AOP(面向切面编程)是一种编程范式,它允许开发者在不修改原有代码的情况下,插入新的功能或改变现有行为。在JavaScript中,AOP常用于管理代码的副作用,如日志记录、异常处理、性能监控等。在这个场景...

    JavaScript中AOP的实现与应用

    在了解JavaScript中的AOP(面向切面编程)之前,首先需要明确AOP的基本概念。AOP是一种编程范式,旨在将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。横切关注点是那些对多个地方的代码造成影响的点...

    AOP面向切面编程的JavaScript实现

    在Java领域,Spring框架是AOP的典型代表,而在JavaScript中,虽然没有内置的支持,但可以通过一些库和技巧来实现类似的功能。 JavaScript AOP的实现通常依赖于两种主要技术:代理(Proxies)和装饰器(Decorators)...

    Javascript aop(面向切面编程)之around(环绕)分析

    inalFunc.apply(this, arguments);console.log("after function");}}var obj = {foo: function(){console.log...虽然实现不如成熟的 AOP 框架那样完善,但在特定场景下,JavaScript 的 AOP 仍然能够发挥很大的作用。

    基于js的简易aop框架

    “源码”标签表明这个项目包含了实现AOP框架的原始代码,对于学习和理解JavaScript AOP工作原理非常有价值。而“工具”标签可能意味着这个框架可以作为开发工具,帮助开发者更方便地在JavaScript应用中应用AOP概念。...

    decorator-aop:带有ES7装饰器的Javascript AOP

    装饰器-aop 使用ES7装饰器进行Java语言方面的编程。 安装 npm install decorator-aop 用法 将类分配给方面。 @Aspect.target(Example) class ExampleAspect extends Aspect { } 连接点 使用以下装饰器在方面上...

    JavaScript之AOP编程实例

    JavaScript AOP编程,即面向切面编程(Aspect-Oriented Programming),是一种编程范式,旨在将横切关注点(cross-cutting concerns)从业务逻辑代码中分离出来,提高模块化。横切关注点指的是分散在多处的、对于...

    javascript _aop

    JavaScript 面向切面编程(AOP,Aspect-Oriented Programming)是一种编程范式,旨在提高代码的可重用性和模块化。在传统的面向对象编程中,我们通常会将业务逻辑、数据处理和系统关注点(如日志、事务管理、错误...

    使用AOP改善javascript代码

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

    AOP编程技术分享

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

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

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

    ext进销存aop ioc ef

    1. EXT JS:EXT JS是一个基于JavaScript的开源UI库,主要用于构建富客户端Web应用程序。它提供了一套完整的组件模型,包括表格、面板、窗口、菜单等,使得开发者能够创建功能丰富的、交互性强的网页应用。EXT JS使用...

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

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

Global site tag (gtag.js) - Google Analytics