依赖注入实现小demo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43414945/article/details/102652018

下午复习了一下依赖注入的实现,感觉依赖注入和策略模式又点相似,但是依赖注入主要是为了提高效率,对于使用的功能才注入,而不是全部的引用,说白了就是一种按需引入的模式,废话不多说,上代码。

<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>

不足之处 敬请校正

猜你喜欢

转载自blog.csdn.net/weixin_43414945/article/details/102652018