在node.js ES6中,是否可以传入一个types然后实例化它?

在我的项目中,我有几个看起来像这样的类:

"use strict"; var exports = module.exports = {}; var SystemsDAO = require('./dao/systems/SystemsDAO.js'); var aop = require('./dbAOPUtils.js'); var Proxy = require('harmony-proxy'); var sqlite3 = require('sqlite3').verbose(); /* Wraps a SystemServiceObject and passes in a constructed * DAO object as an argument to specified functions. */ exports.SystemsDAOIntercepter = function(obj) { let handler = { get(target, propKey, receiver) { const origMethod = target[propKey]; return function(...args) { console.log('systemDAOIntercepter: BEGIN'); // Create a reportsdao object and proxy it through an dbSQLiteConnectionIntercepter // (So we don't have to create it for every single method) var systemdao = new SystemsDAO('blah'); var proxSystemDAO = aop.dbSQLiteConnectionIntercepter(systemdao, sqlite3.OPEN_READONLY); args.push(proxSystemDAO); console.log('propKey: ' + target[propKey]); let result = null; result = origMethod.apply(this, args); console.log('systemsDAOIntercepter: END'); return result; }; } }; return new Proxy(obj, handler); }; 

是否有可能传入一个参数的types,以便我只需要一个DAOIntercepter类,而不是每个数据访问对象的一个​​?

我可以通过传递文件名来看到我require()的部分require() SystemsDAO工作,但是对于该类的实例化,我无法真正看到如何做到这一点。

当然 – 你可以像javascript中的其他variables一样传递类。

请注意, DAOType现在在方法内提供并实例化。

 "use strict"; var exports = module.exports = {}; var aop = require('./dbAOPUtils.js'); var Proxy = require('harmony-proxy'); var sqlite3 = require('sqlite3').verbose(); /* Wraps a SystemServiceObject and passes in a constructed * DAO object as an argument to specified functions. */ exports.makeInterceptor = function(DAOType, obj) { let handler = { get(target, propKey, receiver) { const origMethod = target[propKey]; return function(...args) { console.log('systemDAOIntercepter: BEGIN'); // Create a reportsdao object and proxy it through an dbSQLiteConnectionIntercepter // (So we don't have to create it for every single method) var dao = new DAOType('blah'); var proxSystemDAO = aop.dbSQLiteConnectionIntercepter(dao, sqlite3.OPEN_READONLY); args.push(proxSystemDAO); console.log('propKey: ' + target[propKey]); let result = null; result = origMethod.apply(this, args); console.log('makeInterceptor: END'); return result; }; } }; return new Proxy(obj, handler); }; 

我不得不承认,我会(亲自)喜欢看到外部实例化类,并通过参数注入,但是,而不是创build它内联。