关于如何在javascript中实现DI
关于如何在javascript中实现DI
bosscheng 发表于2年前
关于如何在javascript中实现DI
  • 发表于 2年前
  • 阅读 30
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 在javascript中,对于实现DI,依赖的是 toString() 方法,通过toString 方法,获取函数中的参数。

具体实现

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

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

具体代码实现:

待定





标签: ID
共有 人打赏支持
粉丝 80
博文 211
码字总数 91232
×
bosscheng
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: