Javascript,instanceof函数的行为

时间:2013-03-06 15:14:23

标签: javascript node.js instanceof

我正在创建一个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 ),这个问题不存在。

有什么建议吗?你需要更多的信息吗? 感谢

1 个答案:

答案 0 :(得分:0)

总结我上面的评论:

鉴于:

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

看起来你的PLC变量在哪里被分配了一个mod_plc的实例(因此不再是对预期构造函数的引用)。