我是Nodejs的初学者,我按照指南研究了这个。
现在,我有module.js
function Hello()
{
var name;
this.setName=function(thyName){
name=thyName;
};
this.sayHello=function()
{
console.log("hello,"+name);
};
};
module.exports=Hello;
和getModule.js
var hello = require("./module");
hello.setName("HXH");
hello.sayHello();
但是当我跑步时:
d:\nodejs\demo>node getModule.js
我收到了错误:
d:\nodejs\demo\getModule.js:2
hello.setName("HXH");
^
TypeError: Object function Hello()
{
var name;
this.setName=function(thyName){
name=thyName;
};
this.sayHello=function()
{
console.log("hello,"+name);
};
} has no method 'setName'
at Object.<anonymous> (d:\nodejs\demo\getModule.js:2:7)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
为什么我这样做?我只是按照指南。
答案 0 :(得分:1)
我不确定您遵循的指南,但module.js
会导出一个班级。由于module.js
导出一个类,当你执行require('./module')
时,你会得到一个类。但是,您正在使用该类,就好像它是该类的实例一样。如果您想要一个实例,则需要使用new
,如下所示:
var Hello = require('./module'); // Hello is the class
var hello = new Hello(); // hello is an instance of the class Hello
hello.setName("HXH");
hello.sayHello();
答案 1 :(得分:1)
首先,NodeJS遵循CommonJS规范来实现模块。你应该知道它是如何工作的。
其次,如果您想像编写方式一样使用模块,则应修改module.js
和getModule.js
,如下所示:
//module.js
module.exports.Hello= Hello;
//getModule.js.js
var Hello = require("./module");
var hello = new Hello();
hello.setName("HXH");
hello.sayHello();