JavaScript实现依赖注入
var cache = {};
// 通过解析Function.prototype.toString()取得参数名function getParamNames(func) { // 正则表达式出自http://krasimirtsonev.com/blog/article/Dependency-injection-in-JavaScript var paramNames = func.toString().match(/^function\s*[^\(]*\(\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...

浙公网安备 33010602011771号