JavaScript反射与依赖注入实例详解

  

本文实例讲述了JavaScript反射与依赖注入。分享给大家供大家参考,具体如下:

  

对于javascript中的反射的理解,一直都是认为,利用数组对回调函数进行保存,之后在适当的时刻利用电话或是应用方法,对回调进行调用即可,一般如下操作:

  

首先定义两个方法:

        var服务=function () {   返回{名称:'服务'};   }   var路由器=function () {   返回{名称:“路由器”};   }      之前      

我们有另一个函数需要用到这两个模块。

        var doSomething=function () {   var s=服务();   var r=路由器();   };      之前      

当然,我们希望能够能够使用依赖注入的方式去做,把该控制权交给计算机去做,而不是人为的去调用如下:

        var doSomething=喷射器。解决(路由器,、服务,函数(a, b, c) {   期望((). name) .to.be(“路由器”);   期望(b) .to.be(“其他”);   期望(c () . name) .to.be(“服务”);   });   doSomething(“其他”);      之前      

那么我们可以造出一个反射方法如下:

        var喷射器={   依赖性:{},   注册:函数(关键字,值){   this.dependencies[主要]=价值;   },   解决:函数(deps、函数、范围){   var args=[];   (var=0;i之前      

如上代码、依赖用来保存回调函数集合,决心用来调用。

  

这也算是一个比较成熟好了的想法。

  

<>强但是依旧存在几点问题:

  

1解决在进行调用时,deps参数列表顺序必须保持一致。

  

2这一点有点牵强,但是也算。在调用时,需要再一次的输入形参,而不能直接调用。

  

那么为了解决以上问题,给出以下解决方案:

        var喷射器={   依赖性:{},   注册:函数(关键字,值){   this.dependencies[主要]=价值;   },   解决:函数(){   var func, deps、范围参数=[],自我=;   如果(typeof参数[0]==='字符串'){   func=参数[1];   deps[0]=参数。替换(//g) .split (" ");   [2]=参数范围| | {};   其他}{   func=参数[0];   .match deps=func.toString()函数(/^ \ s * * \ [^] (\ s * (* \ [^] (\ s * ([^] *) \)/m) [1]。替换(//g) .split (" ");   范围=参数[1]| | {};   }   返回函数(){   var=Array.prototype.slice。调用(参数,0);   (var=0;i   注射器。解决([服务、路由器,函数(服务、路由器){   }));      之前      

你可能注意到在第一个参数后面有两个逗号——注意

  

这不是笔误。空值实际上代表“其他”参数(占位符)。这显示了我们是如何控制参数顺序的。

  

最后还有一种方式,直接注入范围,也就是直接注入作用域,那么作用域被注入,也就不存在上述的传参顺序问题

  

因为不在需要传递参数,直接可以从作用域中访问到。

        var喷射器={   依赖性:{},   注册:函数(关键字,值){   this.dependencies[主要]=价值;   },   解决:函数(deps、函数、范围){   var args=[];   范围=范围| | {};   (var=0;iJavaScript反射与依赖注入实例详解