【发布时间】:2016-08-23 18:50:18
【问题描述】:
在我的项目中,我有几个如下所示的类:
"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);
};
是否可以为参数传入一个类型,以便我只需要一个 DAOIntercepter 类,而不是每个数据访问对象一个?
我可以通过传递文件名看到我 require() 和 SystemsDAO 工作的部分,但至于该类的实例化,我真的看不出怎么可能做到这一点。
【问题讨论】:
-
您是否试图使
new SystemsDAO()调用动态/使用不同的对象?如果是这样,是的,您可以使用 ES6 类来做到这一点(假设这就是您所说的“类型”)。只需像传递任何其他变量一样为类传递一个指针/变量,然后就可以调用new VariableName()。 -
@dvlsg 正确。我希望能够将其换成其他 DAO,并通过这样做来缩减我的代码库的大小。
标签: javascript node.js ecmascript-6 es6-proxy