我正在创建一个 Node.js 应用程序。我有一个具有这种结构的项目:
[Project Folder]
|
|---[plc]
| |--- plc.js
| |--- scheduler.js
|
|---[source]
| |--- source.js
|
|---[test]
|--- test.js
文件plc.js、scheduler.js和source.js是“对象”,它们需要其他对象,并且在文件末尾有一个对象的“导出”。特别是文件plc.js有一个奇怪的行为。首先是代码:
var mod_pollist = require('./polling_list.js'); // Polling list.
var mod_operation = require('./operation.js'); // Single operation.
var mod_scheduler = require('./scheduler.js'); // Scheduler object.
var mod_events = require('events'); // Event emitter
var mod_util = require('../util.js'); // Util functions
function plc(comm_driver){
var self = this;
// Other variables are set here
}
// Other functions written as plc.prototype.something = function(parameters){...}
module.exports = plc;
现在奇怪的行为:所有其他文件的文件顶部都有用于导入plc.js(var mod_plc = require('../plc/plc.js');
或var mod_plc = require('./plc.js');
调度程序)的代码,但只有在test.js中它才能正常工作,事实上如果我写
if(PLC instanceof mod_plc)
console.log('yes');
在文件test.js中,我可以在控制台上找到“是”,如果我在其他文件中编写相同的代码,我会收到错误:
if(PLC instanceof mod_plc)
^
TypeError: Expecting a function in instanceof check, but got #<Object>
at Object.<anonymous> (C:\Users\Massimo\workspace\Scada\plc\scheduler.js:16:
19)
一个“临时解决方案”可能是
if(PLC instanceof mod_plc.constructor)
console.log('yes');
但我认为这不是真正的解决方案,因为对于所有其他对象(我有 20 多个类似plc.js的文件),这个问题不存在。
有什么建议吗?您需要更多信息吗?谢谢