1

Node.js アプリケーションを作成しています。私はこの構造のプロジェクトを持っています:

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

ファイルplc.jsscheduler.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');またはスケジューラー用) をインポートするためのコードがありますが、 test.jsvar mod_plc = require('./plc.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個以上のファイルを書いたことがあります)では、この問題は存在しないため、これが本当の解決策だとは思いません。

なにか提案を?もっと情報が必要ですか?ありがとう

4

1 に答える 1

0

上からの私のコメントを要約すると:

とすれば:

  • TypeErrorあなたmod_plcObject(コンストラクター関数ではない)であることを示します。と
  • 使用mod_plc.constructorすると、期待される動作が得られます。

PLC変数のどこかにインスタンスが割り当てられているようです(mod_plcしたがって、期待されるコンストラクター関数への参照ではなくなりました)。

于 2013-03-07T13:25:11.353 に答える