依赖注入的javascript实现
2015-12-14 20:53
621 查看
前后端终究是要完成合久必分分久必合的趋势。在前后端分离的前提下,后端的一些设计模式慢慢地向前端过渡。
依赖注入在java等后端语言的发展下慢慢在前端使用。
在java中di主要是将对象在容器中实例化。使用控制反转(ioc)。像在angular中,双向数据绑定根据对模型的监控进行实现。而依赖注入是将服务等实例化后注入到控制器中进行实现。
下面就讲一下angular实现di的主要过程。主要依靠js语言的灵活性。
依赖注入在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();
相关文章推荐
- 用 JavaScript 编写第一个 UWP 应用 - 手机归属地查询
- jSON Call can throw but it is not marked with try
- json处理复杂对象jsonConfig
- javascript发送验证码
- express package.json解析
- 关于js的一些小tip
- XML解析、Json解析
- 使用js Math.random()函数生成n到m间的随机数字
- 如何处理JS与smarty标签的冲突
- 原生态ajax和 ajax的两个框架的 JS实现
- jsp中显示本地图片
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript计时事件
- js 中{},[]中括号,大括号使用详解
- JS 第二记
- js 分页
- Gson解析json的数据
- JS之理解组合继承模式和寄生式组合继承的区别
- JS产生随机数的几个用法!
- js未定义判断