博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于如何在javascript中实现DI
阅读量:6514 次
发布时间:2019-06-24

本文共 708 字,大约阅读时间需要 2 分钟。

hot3.png

具体实现

function argumentNames(fn) {    var ret;    // 获取 字符串 形式    var methodCode = fn.toString();    // 获取 '()' 里面的 参数     methodCode.replace(/\((.*)\)/, function (match, g1) {        var argStr = g1.replace(/\s/g, '');        // 变成字符串        ret = argStr.length ? argStr.split(',') : [];    });    return ret;}// testargumentNames(function(a,b){}) // ['a','b']

具体的实现方式是:在代码运行的时候,拦截这个方法,然后把对应的模块传递给函数的上下文。例如现在的模块化加载实现,seajs,requirejs 中 define() require() 方法的实现,或者看angular的实现

angular.module('myModule',[]);myModule.service('myService',function(a,b){});

对于这些框架的实现:首先对其传入的函数所做的第一件事情就是获取其参数列表,然后再把这个模块保存起来,这样就有了参数列表,也就知道了要注入多少个依赖,在接着,把对应的依赖传入,通过参数形式传进去。

具体代码实现:

待定

转载于:https://my.oschina.net/bosscheng/blog/538462

你可能感兴趣的文章
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
linux不能访问80端口,lunux开放80端口(本地访问不了linux文件可能是这个原因)...
查看>>
android单位转换小程序,微信小程序中rpx与rem单位转换
查看>>
ps切图教程 android,PS前端切图完整教程
查看>>
HTML如何把输入框变成必填值,required输入框为必填项
查看>>
背锅侠逆袭之路
查看>>
演示:使用协议分析器取证IPv6的报文结构
查看>>
oracle 11gr2 rac中的4种IP解说
查看>>
为什么你找不到工作?
查看>>
汇编语言的应用
查看>>
device platform 相应的表
查看>>
【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
查看>>
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>
中断小笔记
查看>>
FreeBinary 格式说明
查看>>
使用Spring Cloud和Docker构建微服务
查看>>