2015-10-09 5 views
0

В Node.js (Ver. 0.12.0) У меня есть класс с методом, определенным как это:различное поведение в Node.js и Chrome

В ./constructor.js:

function Pow() {} 
Pow.prototype.wow = require("./wow/definition.js"); 

module.exports = Pow; 

./wow/definition.js В:

var Pow = require("../constructor.js"); 

function wow() { 

    return new Pow(); 
} 

module.exports = wow; 

В ./index.js:

var Pow = require("./constructor.js"); 
var pow = new Pow(); 
pow.wow(); 

Последняя строка ./index.js выдает следующее сообщение об ошибке:

object is not a function 
    at Pow.wow(./wow/definition.js:5:10) 

Запуск и тот же код в Google Chrome (версия. 45.0.2454.101 64-разрядная версия), который также использует двигатель V8 но не CommonJS требуют системы, не приводит к ошибке:

function Pow() {} 
 
Pow.prototype.wow = wow; 
 

 
function wow() { 
 

 
    return new Pow(); 
 
} 
 

 
var pow = new Pow(); 
 
pow.wow();

Может кто-нибудь сказать мне, почему в Nodejs, require("./constructor.js") возвращает конструктор в ./index.js, но не строимый объект в ./wow/definition.js?

+1

не используют круговые зависимости! –

+0

@ DanielA.White - Если вы не применяете метод клона – StudentsTea

+0

нет, просто не используйте круговые зависимости. – bhspencer

ответ

0

Как @slebetman упоминает в своем комментарии к исходному вопросу, support for circular dependencies in CommonJS, the specification most similar to the implementation of require() in NodeJs, is still somewhat buggy. Таким образом, избегайте цирикулярных зависимостей до тех пор, пока поддержка их в NodeJs не будет разработана.

Смежные вопросы