2015-07-18 2 views
1

У меня проблемы с наследованием в node.js. Я следил за шаблонами из stackoverflows существующих потоков, но мой код по-прежнему не работает, как должно.Node.js наследование модулей

Давайте начнем с только два первых пунктов, 'base.js':

function Base() { 
    this.type = 'empty'; 
} 

Base.prototype.getType = function() { 
    return this.type; 
} 

module.exports = Base; 

Тогда у меня есть файл 'second.js', и он должен унаследовать от базы

var Base = require('./base.js'), util = require('util'); 

function Second() { 
    Base.apply(this, arguments); 
} 

util.inherits(Second, Base); 


Second.prototype.getData = function() { 
    return 12; 
} 

module.exports = Second; 

В моих app.js Я звоню

var second = new require('./second.js'); 
console.log(second.getType()); 

И эта ошибка бросания 'getType не определена'. Однако, когда я помещаю все это в один файл (например, app.js), все работает отлично. Можете ли вы указать, что не так в моем коде или предложить лучший способ сделать это?

Спасибо!

+0

Попробуйте 'new (require ('./ second.js'))' вместо этого. Это не сработало бы с «базой». – Bergi

ответ

1

В вашем app.js вам нужно сначала требуется конструктор, а затем построить новый экземпляр:

var Second = require('./second.js'); 
var second = new Second(); 

console.log(second.getType()); 

в качестве альтернативы вы можете также сделать:

var second = new (require('./second.js')); 
console.log(second.getType()); 

Но в любом случае, вам нужно сначала требуется и только после применения оператора new. Это связано с тем, что оператор operator precedence, new имеет очень высокий приоритет.

+0

Теперь он работает, и я вижу разницу. Большое спасибо! –

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