文档章节

关于如何在javascript中实现DI

bosscheng
 bosscheng
发布于 2015/12/02 17:29
字数 263
阅读 34
收藏 0
ID

具体实现

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;
}

// test
argumentNames(function(a,b){}) // ['a','b']

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

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

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

具体代码实现:

待定





© 著作权归作者所有

共有 人打赏支持
bosscheng
粉丝 80
博文 303
码字总数 95443
作品 0
南京
前端工程师
私信 提问
iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge

iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge 转载:原地址 https://www.jianshu.com/p/e951af9e5e74 上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现......

法斗斗
2018/05/11
0
0
React Native iOS混合开发实战教程

在做RN开发的时候通常离不了JS 和Native之间的通信,比如:初始化RN时Native向JS传递数据,JS调用Native的相册选择图片,JS调用Native的模块进行一些复杂的计算,Native将一些数据(GPS信息,...

JiaPengHui
2018/09/15
0
0
《JavaScript启示录》是写给谁的书?

本书无关于JavaScript设计模式,也无关于JavaScript面向对象代码实现。本书的写作目的也不是鉴别JavaScript语言特点的好坏。本书并不是一本完整的参考指南。它面向的读者人群并不是编程新手或...

生气的散人
2014/02/11
1K
5
一文读懂 JavaScript 和 ECMAScript 的区别

我曾试着在谷歌上检索 “ JavaScript 和 ECMAScript 之间的区别。” 最后我在得到的海量的混淆不清又相互矛盾的结果中彻底绝望了: “ECMAScript 是标准。” “JavaScript 是标准。” “ECM...

oschina
2017/11/06
1K
9
关于静态URL标识传递的解决办法

比如从http://a.b.com/?utm_source=lx_baidu_bj_pcpc页面中随便点击一个静态URL,?utm_source=lx_baidu_bj_pcpc都能传递到所打开的静态URL中,同时firebug查看请求头部,它的referrer变为来源...

患恐高症的小鸟
2015/02/04
266
0

没有更多内容

加载失败,请刷新页面

加载更多

cnetos7+docker+rancher构建基于DevOps的全自动CI【01】

来自DevOps实践分享,分享从开发代码到生产环境部署的一条龙操作的实践及经验, 包含工具技术的选型及考量、私有代码库与私有镜像库的应用等。 1、环境选择 安装Rancher环境,一定要在干净的...

Elson
25分钟前
1
0
21分钟教会你分析MaxCompute账单

背景 阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。并且产品每天按照project为维度进行计量计费(账单基本情况下会第二天6点前产出)...

zhaowei121
28分钟前
0
0
CTO职场解惑指南系列(一)

基于科技能够改变世界的事实,几乎每个公司的程序员都自带闪光灯。程序员的手和普通人的手自然是有区别的,“我们可是用双手改变了世界” 。(码农真的是靠双手吃饭,呵呵) 这个世界上但凡靠...

阿里云云栖社区
33分钟前
3
0
css实现图片自适应容器宽高

css实现图片自适应容器宽高的做法一般如下所示 <style>div{width: 200px; height: 200px}div img{width: 100%; height: 100%}</style><div><img src="xxxx.png" /></div> 当外层容......

小草先森
33分钟前
3
0
PlatON在CentOS上编译部署

本文作者为万向区块链CTO罗荣阁。 目录 PlatON在CentOS上编译部署 1. CentOS 环境准备 1.1. 使用rpm 安装devtoolset-7 1.2. 使用rpm 安装dos2unix 1.3. 准备PlatON代码 1.4. 确保build脚本正...

万向区块链
41分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部