您的位置:首页 > Web前端 > JavaScript

依赖注入的javascript实现

2015-12-14 20:53 621 查看
前后端终究是要完成合久必分分久必合的趋势。在前后端分离的前提下,后端的一些设计模式慢慢地向前端过渡。

依赖注入在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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: