版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
下午复习了一下依赖注入的实现,感觉依赖注入和策略模式又点相似,但是依赖注入主要是为了提高效率,对于使用的功能才注入,而不是全部的引用,说白了就是一种按需引入的模式,废话不多说,上代码。
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
// 建立一个存储服务容器
var deps = {
'eat':function () {
console.log('吃饭');
},
'drink':function () {
console.log('喝红牛');
}
}
//创建一个以来注射的构造函数
var DI = function(dependency) {
//定义一个属性 来存储服务
this.dependency = dependency;
}
DI.prototype.inject = function(fn) {
//通过目标函数 使用正则提取到函数中的参数
var result = fn.toString().match(/^[^(]+\(([^)]+)\)/);
// 提取参数 使用逗号进行分割
var params = result ? result[1].split(',') : [];
//通过获取的参数, 去匹配服务对象
console.log(result);
var paramsdeps = params.map( dep => this.dependency[dep]);
//返回参数名对应的依赖函数
return function () {
return fn.apply(null,paramsdeps);
}
}
//实例化注射器对象 并初始化this.dependency
var di = new DI(deps);
//使用 注射器 将依赖 注射到目标函数
var play = di.inject(function(eat,drink) {
eat();
drink();
})
//执行目标函数
play();
</script>
</body>
</html>
不足之处 敬请校正