很多实现了,基于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 );
分享到:
相关推荐
JavaScript AOP(面向切面编程)是一种编程范式,它允许开发者把横切关注点(cross-cutting concerns)从业务逻辑代码中分离出来。在面向对象编程(OOP)中,通常一个对象会处理与其核心功能直接相关的事务,而AOP使...
"AOP基本功能在JavaScript中的研究和实现" 随着Web2.0时代的到来,Web应用的规模和复杂度不断增加,对应的JavaScript软件也变得越来越复杂。因此,有必要对JavaScript软件编程方法进行研究。本文首先对JavaScript ...
JavaScript AOP(面向切面编程)是一种编程范式,它允许开发者在不修改原有代码的情况下,插入新的功能或改变现有行为。在JavaScript中,AOP常用于管理代码的副作用,如日志记录、异常处理、性能监控等。在这个场景...
在了解JavaScript中的AOP(面向切面编程)之前,首先需要明确AOP的基本概念。AOP是一种编程范式,旨在将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。横切关注点是那些对多个地方的代码造成影响的点...
在Java领域,Spring框架是AOP的典型代表,而在JavaScript中,虽然没有内置的支持,但可以通过一些库和技巧来实现类似的功能。 JavaScript AOP的实现通常依赖于两种主要技术:代理(Proxies)和装饰器(Decorators)...
inalFunc.apply(this, arguments);console.log("after function");}}var obj = {foo: function(){console.log...虽然实现不如成熟的 AOP 框架那样完善,但在特定场景下,JavaScript 的 AOP 仍然能够发挥很大的作用。
“源码”标签表明这个项目包含了实现AOP框架的原始代码,对于学习和理解JavaScript AOP工作原理非常有价值。而“工具”标签可能意味着这个框架可以作为开发工具,帮助开发者更方便地在JavaScript应用中应用AOP概念。...
装饰器-aop 使用ES7装饰器进行Java语言方面的编程。 安装 npm install decorator-aop 用法 将类分配给方面。 @Aspect.target(Example) class ExampleAspect extends Aspect { } 连接点 使用以下装饰器在方面上...
JavaScript AOP编程,即面向切面编程(Aspect-Oriented Programming),是一种编程范式,旨在将横切关注点(cross-cutting concerns)从业务逻辑代码中分离出来,提高模块化。横切关注点指的是分散在多处的、对于...
JavaScript 面向切面编程(AOP,Aspect-Oriented Programming)是一种编程范式,旨在提高代码的可重用性和模块化。在传统的面向对象编程中,我们通常会将业务逻辑、数据处理和系统关注点(如日志、事务管理、错误...
在JavaScript中,AOP同样能够提供代码重构、增强模块间解耦、代码复用等优点。下面将根据文档提供的内容,详细解释在JavaScript中如何使用AOP来改善代码。 1. 防止window.onload被二次覆盖 在JavaScript中,window....
AOP编程技术分享,包括iOS和javascript等多个平台实现
什么是AOP? AOP(面向切面编程)的主要...通常,在 JavaScript 中实现 AOP,都是指把一个函数“动态织入”到另外一个函数之中,具体的实现技术有很多,下面我用扩展 Function.prototype 来做到这一点。请看下面代码:
1. EXT JS:EXT JS是一个基于JavaScript的开源UI库,主要用于构建富客户端Web应用程序。它提供了一套完整的组件模型,包括表格、面板、窗口、菜单等,使得开发者能够创建功能丰富的、交互性强的网页应用。EXT JS使用...
本文将详细解析标题和描述中提到的“商城系统源码”,以及其技术栈Spring MVC、AOP、MyBatis、Ajax和JavaScript,并结合文件名称"shop",探讨这些技术在构建一个商城系统中的应用。 首先,商城系统是电子商务平台的...