Я создаю приложение Node.js. У меня есть проект с этой структурой:Javascript, поведение instanceof function
[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');
для планировщика), но только в тесте .js он работает правильно, Infact, если я пишу
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) эта проблема не существует.
Любое предложение? Вам нужна дополнительная информация? Благодаря
Возможный дубликат [Что означает этот экземпляр сообщения об ошибке?] (Http://stackoverflow.com/questions/6021245/what-does-this-instanceof-error-message-mean) – jbabey
Что делает декларация экспорта из Как выглядит plc.js? – pgreen2
Учитывая, что 'TypeError' сообщает вам, что' mod_plc' является 'Object' (а не функцией конструктора) и что он работает с' mod_plc.constructor', я бы сказал, что модуль (например, 'scheduler.js') экспортирует новый экземпляр 'plc', а не сама функция. – c24w