2046 / aspect

简单的 javascript AOP 实现

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

#Aspect

简单的 JavaScript AOP 实现,提供beforeafter方法。

##使用

下载项目中 dist 目录里面的文件,并配置好模块相关信息(如:路径,别名),使用如下示例代码即可开始使用。

seajs.use(['aspect'], function(aspect){
  var o = {
    xxx : function(){
      console.log('xxx');
    }
  };
  
  aspect.before(o, 'xxx', function(){
    console.log('before xxx');
  });
  
  aspect.after(o, 'xxx', function(){
    console.log('after xxx');
  });
  
  o.xxx(); // before xxx, xxx, after xxx
});

require(['aspect'], function(aspect){
  var o = {
    xxx : function(){
      console.log(2);
    }
  };
  
  aspect.before(o, 'xxx', function(){
    console.log(1);
  });
  
  aspect.after(o, 'xxx', function(){
    console.log(3);
  });
  
  o.xxx(); // 1 2 3
});

##使用说明

###before aspect.before(obj, methodName, callback, [context])

obj[methodName]方法执行前,先执行callback函数

callback函数在执行时,接收的参数与传给obj[methodName]参数相同。如果传入了context参数,则callback里的this指向context

var aspect = require('aspect');

var o = {
  xxx : function(){
    console.log(2);
  }
};

aspect.before(o, 'xxx', function(){
  consoel.log(1);
});

o.xxx(); // 1 2

beforecallback中使用return false,可以阻止原函数执行

var aspect = require('aspect');

var o = {
  xxx : function(){
    console.log(2);
  }
};

aspect.before(o, 'xxx', function(){
  consoel.log(1);
  return false;
});

o.xxx(); // 1

###after aspect.after(obj, methodName, callback, [context])

obj[methodName]方法执行后,再执行callback函数

callback函数在执行时,接收的参数是obj[methodName]执行完成后的返回值以及传给obj[methodName]的参数。如果传入了context参数,则callback里的this指向context

var aspect = require('aspect');

var o = {
  xxx : function(){
    console.log(3);
  }
};

aspect.after(o, 'xxx', function(returned, a, b){
  consoel.log(returned, a, b);
});

o.xxx(1, 2); 3, undefined, 1, 2

beforeafter是按注册的先后顺序执行的,先注册先执行

var aspect = require('aspect');

var o = {
  xxx : function(){
    console.log(3);
  }
};

aspect.before(o, 'xxx', function(){
  console.log(1);
});

aspect.before(o, 'xxx', function(){
  console.log(2);
});

aspect.after(o, 'xxx', function(){
  console.log(4);
});

aspect.after(o, 'xxx', function(){
  console.log(5);
});

o.xxx(); 1, 2, 3, 4, 5

About

简单的 javascript AOP 实现

License:MIT License


Languages

Language:JavaScript 98.7%Language:CSS 1.3%