依赖注入的javascript实现

前后端终究是要完成合久必分分久必合的趋势。在前后端分离的前提下,后端的一些设计模式慢慢地向前端过渡。

依赖注入在java等后端语言的发展下慢慢在前端使用。

在java中di主要是将对象在容器中实例化。使用控制反转(ioc)。像在angular中,双向数据绑定根据对模型的监控进行实现。而依赖注入是将服务等实例化后注入到控制器中进行实现。

下面就讲一下angular实现di的主要过程。主要依靠js语言的灵活性。

var
    // 假设已定义好某些Service      这里相当于一个容器,用于实例化对象。
    services = { abc: 123, def: 456, ghi: 789 },

    // 获取func的参数列表(依赖列表)   获取需要依赖的函数名(也就是所要需要使用的函数key值)
    getFuncParams = function (func) {
        var matches = func.toString().match(/^function\s*[^\(]*\(\s*([^\)]*)\)/m);
        if (matches && matches.length > 1)
            return matches[1].replace(/\s+/, '').split(',');
        return [];
    },

    // 根据参数列表(依赖列表)填充参数(依赖项)     根据需要的函数key值,获取对应的value值(函数的具体实现),并将这些函数放在数组里面,以便apply调用
    setFuncParams = function (params) {
        for (var i in params) {
            params[i] = services[params[i]];
        }
        return params;
    };

// 激活器     在对象中使用apply实现函数调用
function Activitor(func) {
    var obj = {};
    func.apply(obj, setFuncParams(getFuncParams(func)));
    return obj;
}

// 定义新Service      相当于([abc, ghi] , Service(abc,ghi))   在Service控制器中调用注入的abc、ghi实例服务。
function Service(abc, ghi) {
    this.write = function () {
        console.log(abc);
        console.log(ghi);
    }
}

// 实例化Service并调用方法
var service = Activitor(Service);
service.write();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值