javascript技术栈中的四种依赖注入小结_基础知识

javascript技术栈中的四种依赖注入小结_基础知识

ID:30775884

大小:155.56 KB

页数:12页

时间:2019-01-03

javascript技术栈中的四种依赖注入小结_基础知识_第1页
javascript技术栈中的四种依赖注入小结_基础知识_第2页
javascript技术栈中的四种依赖注入小结_基础知识_第3页
javascript技术栈中的四种依赖注入小结_基础知识_第4页
javascript技术栈中的四种依赖注入小结_基础知识_第5页
资源描述:

《javascript技术栈中的四种依赖注入小结_基础知识》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Javascript技术栈中的四种依赖注入小结作为面向对象编程中实现控制反转(InversionofControl,下文称IoC)最常见的技术手段之_,依赖注入(DependencyInjection,下文称DI)可谓在OOP编程中大行其道经久不衰。比如在J2EE中,就有大名鼎鼎的执牛耳者SpringeJavascript社区中口然也不乏一些积极的尝试,广为人知的AngularJS很大程度上就是基于DT实现的。遗憾的是,作为一款缺少反射机制、不支持Annotation语法的动态语言‘Javascript长期以

2、來都没有属于自lA的Spring框架。当然,伴随着ECMAScript草案进入快速迭代期的春风,Javascript社区屮的各种方言、框架可谓群雄并起,方兴未艾。可以预见到,优秀的JavascriptDl框架的岀现只是早晚的事。本文总结了Javascript中常见的依赖注入方式,并以inversify,js为例,介绍了方言社区对于Javascript中DT框架的尝试和初步成果。文章分为四节:一.基于Injcctor^Cache和函数参数名的依赖注入二.AngularJS中基丁•双Injector的依赖注入三.

3、TypeScript中基于装饰器和反射的依赖注入四.inversify,jsJavascript技术栈屮的IoC容器一.基于Injector、Cache和函数参数名的依赖注入尽管Javascript中不原生支持反射(Reflection)语法,但是Function,prototype上的toString方法却为我们另辟蹊径,使得在运行时窥探某个函数的内部构造成为可能:toString方法会以字符串的形式返冋包含function关键字在内的整个函数定义。从这个完整的函数定义出发,我们可以利用正则表达式提取出该函

4、数所需要的参数,从而在某种程度上得知该函数的运行依赖。比如Student类_Jtwrite方法的函数签名write(notebook,penci1)就说明它的执行依赖于notebook和penc订对彖。因此,我们可以首先把notebook和penc订对象存放到某个cache中,再通过injector(注入器、注射器)向write方法提供它所需要的依赖:varcache={};//通过解析Function,prototype.toString()取得参数名functiongetParamNames(func){

5、//正则表达式出自http://krasimirtsoncv.com/blog/articlc/Dependcncy-injcction-in-JavaScriptvarparamNames=func.toString().match(厂function's*]飞(]*(s*([飞)]*))/m)[1];paramNames=paramNames.replace(//g,");paramNames=paramNames.splitC/);returnparamNames;}varinjector二{//

6、将func作用域中的this关键字绑定至(Jbind对象上,bind对象可以为空resolve:function(func,bind){//取得参数名varparamNames二getParamNames(func);varparams二[];for(vari=0;i

7、tionNotebook(){}Notebook.prototype,printNamc二function(){console.logCthisisanotebook");};functionPencil(){}Pencil.prototype,printNamc二function(){console.logCthisisapenciT);};functionStudent(){}Studcnt.prototype,write二function(notebook,pencil){if([notebook

8、

9、[

10、pencil){thrownewError(5Dependenciesnotprovided!");}console.log(,writing...');};//捉供notebook依赖cachenotebook5]=newNotebook();//提供penc订依赖cache「pencil']二newPencil();varstudent二newStudcnt();injector.resolve

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。