• JavaScript实现依赖注入


    var cache = {};

    // 通过解析Function.prototype.toString()取得参数名
    function getParamNames(func) {
        // 正则表达式出自http://krasimirtsonev.com/blog/article/Dependency-injection-in-JavaScript
        var paramNames = func.toString().match(/^functions*[^(]*(s*([^)]*))/m)[1];
        paramNames = paramNames.replace(/ /g, '');
        paramNames = paramNames.split(',');
        return paramNames;
    }
    var injector = {
        // 将func作用域中的this关键字绑定到bind对象上,bind对象可以为空
        resolve: function (func, bind) {
            // 取得参数名
            var paramNames = getParamNames(func);
            var params = [];
            for (var i = 0; i < paramNames.length; i++) {
                // 通过参数名在cache中取出相应的依赖
                params.push(cache[paramNames[i]]);
            }
            // 注入依赖并执行函数
            func.apply(bind, params);
        }
    };
      
    function Notebook() {}
    Notebook.prototype.printName = function () {
        console.log('this is a notebook');
    };
      
    function Pencil() {}
    Pencil.prototype.printName = function () {
        console.log('this is a pencil');
    };
      
    function Student() {}
    Student.prototype.write = function (notebook, pencil) {
        if (!notebook || !pencil) {
            throw new Error('Dependencies not provided!');
        }
        console.log('writing...');
    };
    // 提供notebook依赖
    cache['notebook'] = new Notebook();
    // 提供pencil依赖
    cache['pencil'] = new Pencil();
    var student = new Student();
    injector.resolve(student.write, student); // writing...
  • 相关阅读:
    [bzoj 1031][JSOI2007]字符加密Cipher
    [bzoj 3224] tyvj 1728 普通平衡树
    分治算法例题
    Codeforces 1146F. Leaf Partition(树形DP)
    Codeforces 1146H. Satanic Panic(极角排序+DP)
    Codeforces 578E. Walking!(贪心+线段树)
    学习日记0802函数递归,三元表达式,列表生成式,字典生成式,匿名函数+内置函数
    学习日记0808
    0803学习日志迭代器
    学习日记0804生成器
  • 原文地址:https://www.cnblogs.com/Bideam/p/7156500.html
Copyright © 2020-2023  润新知