JavaScript实现依赖注入

var cache = {};

// 通过解析Function.prototype.toString()取得参数名
function  getParamNames(func) {
     // 正则表达式出自http://krasimirtsonev.com/blog/article/Dependency-injection-in-JavaScript
     var  paramNames = func.toString().match(/^ function \s*[^\(]*\(\s*([^\)]*)\)/m)[1];
     paramNames = paramNames.replace(/ /g,  '' );
     paramNames = paramNames.split( ',' );
     return  paramNames;
}
var  injector = {
     // 将func作用域中的this关键字绑定到bind对象上,bind对象可以为空
     resolve:  function  (func, bind) {
         // 取得参数名
         var  paramNames = getParamNames(func);
         var  params = [];
         for  ( var  i = 0; i < paramNames.length; i++) {
             // 通过参数名在cache中取出相应的依赖
             params.push(cache[paramNames[i]]);
         }
         // 注入依赖并执行函数
         func.apply(bind, params);
     }
};
  
function  Notebook() {}
Notebook.prototype.printName =  function  () {
     console.log( 'this is a notebook' );
};
  
function  Pencil() {}
Pencil.prototype.printName =  function  () {
     console.log( 'this is a pencil' );
};
  
function  Student() {}
Student.prototype.write =  function  (notebook, pencil) {
     if  (!notebook || !pencil) {
         throw  new  Error( 'Dependencies not provided!' );
     }
     console.log( 'writing...' );
};
// 提供notebook依赖
cache[ 'notebook' ] =  new  Notebook();
// 提供pencil依赖
cache[ 'pencil' ] =  new  Pencil();
var  student =  new  Student();
injector.resolve(student.write, student);  // writing...

转载于:https://www.cnblogs.com/Bideam/p/7156500.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值