2013-07-17 4 views
0

Я работаю через модуль Node.js, но я зациклился на том, как экспортировать прототип таким образом, чтобы сделать методы доступными.Объектные методы недоступны после включения с требованием

Возьмем, например, следующий код:

var myobj = function(param) { 
    this.test = 'a test'; 
    return this.param = param; 
}; 

myobj.prototype = { 
    indexpage: function() { 
    console.log(this.test); 
    return console.log(this.param); 
    } 
}; 

var mo = new myobj('hello world!'); 
mo.indexpage(); 

Мои результаты, как и ожидалось:

a test 
hello world! 

Если взять тот же код и поместить его в другой файл с модулем. экспорт:

somefile.js

var myobj = function(param) { 
    this.test = 'a test'; 
    return this.param = param; 
}; 

myobj.prototype = { 
    indexpage: function() { 
    console.log(this.test); 
    return console.log(this.param); 
    } 
}; 

// the only line that is different 
module.exports = myobj; 

app.js код

var MyObj = require('myobj.js'); 
var mo = new MyObj('hello world!'); 
mo.indexpage(); 

Теперь я получаю TypeError: Object #<Object> has no method 'indexpage'

Где я буду неправильно? Я работаю над этой отдельной проблемой часами; мое основное понимание javascript не помогает мне понять эту проблему больше, чем искать форумы.

ответ

1

Вы - return Ввод значения из функции конструктора.

var myobj = function(param) { 
    this.test = 'a test'; 
    return this.param = param; 
}; 

должно быть:

var myobj = function(param) { 
    this.test = 'a test'; 
    this.param = param; 
}; 

Из-за возвращения, что вы действительно делаете

var mo = 'hello world!'; 
mo.indexpage(); 
+0

Ах-ха! Я _knew_ возился с coffeescript, пока я изучал node.js, была плохая идея! Из-за этого я узнал что-то ценное. Благодаря! – JoBu1324

+0

Говорилось слишком скоро - теперь у меня нет доступа к свойствам объекта в моих методах - например. 'this.param', но только когда я объявляю свои маршруты. Есть идеи? – JoBu1324

+0

@ JoBu1324 Пока вы правильно вызываете методы, это должно работать. Если вы используете CoffeeScript, вам, вероятно, также следует использовать его систему классов, поскольку он автоматически запрещает функции «возвращать» внутри конструктора. – loganfsmyth

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