依赖注入inject的一种方式

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script>

    var inject = {
        dependencies: {},
        register: function (key, value) {
            this.dependencies[key] = value;
        },
        resolve: function(func, scope) {
            if (Array.isArray(func)) {
                var last = func.length - 1;
                var deps = func.slice(0, last);
                func = func[last]
            } else {
                var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
                var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
                var fnText = func.toString().replace(STRIP_COMMENTS, ‘‘);
                var argDecl = fnText.match(FN_ARGS);
                var deps = argDecl[1].split(‘,‘);
            }

            var arr = [];
            for (var i = 0 ; i < deps.length ; i++) {
                if (this.dependencies.hasOwnProperty(deps[i])) {
                    arr.push(this.dependencies[deps[i]])
                }
            }
            return function(){
                func.apply(scope || {}, arr);
            }

        }
//        resolve: function (deps, func, scope) {
//
//            var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
//            var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
//            var fnText = func.toString().replace(STRIP_COMMENTS, ‘‘);
//            var argDecl = fnText.match(FN_ARGS);
//            var deps = argDecl[1].split(‘,‘);
//            deps = deps.map(function(str){
//                return str.replace(/\s+/gm,‘‘);
//            });
//            var arr = [];
//            for (var i = 0; i < deps.length; i++) {
//                if (this.dependencies.hasOwnProperty(deps[i])) {
//                    arr.push(this.dependencies[deps[i]])
//                }
//            }
//            return function () {
//                func.apply(scope || {}, arr);
//            }
//
//        }
//        resolve: function (deps, func, scope) {
//            var arr = [];
//            for (var i = 0; i < deps.length; i++) {
//                if (this.dependencies.hasOwnProperty(deps[i])) {
//                    arr.push(this.dependencies[deps[i]])
//                }
//            }
//            return function () {
//                func.apply(scope || {}, arr);
//            }
//
//        }
    }
    inject.register(‘$http‘, {
        ‘getName‘: function () {
            return (‘$http‘)
        }
    });

    inject.register(‘$scope‘, {
        ‘getName‘: function () {
            return (‘$scope‘)
        }
    });

    //    function MyController($http, $scope) {
    //        console.log($http.getName());
    //    }

    function MyController($scope, $http) {
        console.log($http.getName());
    }

    MyController = inject.resolve([‘$http‘, ‘$scope‘, MyController]);

    MyController();

</script>
</body>
</html>
时间: 2024-08-03 12:55:35

依赖注入inject的一种方式的相关文章

Spring框架--Spring依赖注入(DI)的方式

Spring框架--Spring依赖注入(DI)的方式 构造方法式: 这是我在实体类中写的一个有参构造 配置applicationContext.xml文件,由于是注入构造方法中属性的值,所以要用constructor-arg标签 name属性:构造方法中的参数名称 value属性:给属性赋值 set方法: 注入属性时要用property标签 调用: Spring集合属性的注入 调用:   原文地址:https://www.cnblogs.com/javaisbest/p/12051897.ht

node.js 下依赖Express 实现post 4种方式提交参数

上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ,详细介绍请点击查看. 分别是这四种: www-form-urlencoded, form-data, application/json, text/xml Express 依赖 bodyParser 对请求的包体进行解析,默认支持:application/json, application/x-

JBoss 7 里一个EJB依赖其他jar的几种方式

JBoss 7 与之前的版本有了巨大的变化,最核心的类的加载方式变了,有点类似OSGI那样搞起来了分模块的类加载方式,而不是以前的分层类加载.按以前的类加载方式,在加载树底下的那些类,总是能看到父节点已经加载过的类.但是分模块加载后就不一样了. 碰到的第一个问题就是,到哪里存放项目以来的那些第三方库 (不只是第三方库,同一个项目里也会有一些jar是需要在不同ejb间共享的).以前的方式是放在common/lib或者server/{部署模块}/lib下面,这样所有的部署模块下的应用都可以访问到这些

[转]Spring通过@Value注解注入属性的几种方式

原文地址:https://blog.csdn.net/csujiangyu/article/details/50945486 ------------------------------------------------------------- 场景假如有以下属性文件dev.properties, 需要注入下面的tag tag=123 通过PropertyPlaceholderConfigurer<bean class="org.springframework.beans.factor

spring注入bean的五种方式

1.属性注入 2.构造方法注入 3.静态工厂注入 package com.voole.factorybeans; import com.voole.beans.TestBean; public class StaticFactoryBean { public static TestBean createInstance(){ return new TestBean(); } } <bean id="staticFactoryTestBean" class="com.vo

Spring为IOC容器注入Bean的五种方式

一 @Import导入组件,id默认是组件的全类名 1 //类中组件统一设置.满足当前条件,这个类中配置的所有bean注册才能生效: 2 @Conditional({WindowsCondition.class}) 3 @Configuration 4 @Import({Color.class,Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class}) 5 //@Import导入组件,id默认是组件的全类名 6

IoC(控制反转)的主要组件和注入的两种方式

一.IoC的主要组件: (1).Spring框架的两个最基本和最重要的包是org.springframework.beans.factory(该包中的主要接口是BeanFactory)和org.springframework.context包(该包中的主要接口是ApplicationFactory).这两个包中的代码提供了Spring IoC特性的基础. (2).Spring IoC框架的主要组件有:Beans.配置文件(beans.xml或applicationContext.xml).Bea

SpringBoot系列: 理解 Spring 的依赖注入(二)

==============================Spring 容器中 Bean 的名称==============================声明 bean 有两个方式, 一个是 @Bean, 另一个是 @Component 和它的子类 (包括 @Service/@Controller/@Repository/@Configuration), Spring 容器中 bean 名生成规则分两大类, 分别是: 一. @Component 和它的子注解是用来注解 Class 的. 这些

理解依赖注入(Dependency Injection)

理解依赖注入 Yii2.0 使用了依赖注入的思想.正是使用这种模式,使得Yii2异常灵活和强大.千万不要以为这是很玄乎的东西,看完下面的两个例子就懂了. class SessionStorage { function __construct($cookieName = 'PHP_SESS_ID') { session_name($cookieName); session_start(); } function set($key, $value) { $_SESSION[$key] = $valu