我正在创建一个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');


但是我认为这不是真正的解决方案,因为对于所有其他对象(我编写的plc.js文件超过20个),这个问题不存在。

有什么建议吗?您需要更多信息吗?
谢谢

最佳答案

总结一下我的意见:

鉴于:


TypeError告诉您mod_plcObject(不是构造函数);和
使用mod_plc.constructor给您预期的行为;


看来您的PLC变量已在某处分配了mod_plc的实例(因此不再是对预期构造函数的引用)。

关于javascript - Javascript,instanceof函数的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15251042/

10-11 20:08