簡體   English   中英

Javascript,instanceof函數的行為

[英]Javascript, behavior of instanceof function

我正在創建一個Node.js應用程序。 我有一個具有以下結構的項目:

[Project Folder]
  |
  |---[plc]
  |     |--- plc.js
  |     |--- scheduler.js
  |
  |---[source]
  |     |--- source.js
  |
  |---[test]
        |--- test.js

該文件plc.js,scheduler.jssource.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 ),這個問題不存在。

有什么建議嗎? 您需要更多信息嗎? 謝謝

總結一下我的意見:

鑒於:

  • TypeError告訴您mod_plc是一個Object (不是構造函數);
  • 使用mod_plc.constructor給您預期的行為;

看起來您的PLC變量已在某處分配了mod_plc的實例(因此不再是對預期構造函數的引用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM