浏览 2157 次
锁定老帖子 主题:javascipt的AOP
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-04
很多实现了,基于jquery和prototype的都有。 http://code.google.com/p/jquery-aop/
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 );
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-06
这也叫AOP?
|
|
返回顶楼 | |