node.js自学笔记(5)-module

来源:互联网 发布:淘宝大v达人怎么申请 编辑:程序博客网 时间:2024/06/17 12:00

模块是nodejs中重要的概念

创建模块

新建一个文件,取名为testerhome.js ,内容如下:

//testerhome.jsvar nameexports.setName = function(theName){    name = theName;};exports.sayName = function(){    console.log('Hello ' + name);};

引用模块

在同级目录下新建一个test.js文件

//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');testerHome.sayName();

上面的文件引用了我们定义的testerhome模块,然后设置其中属性name的值,然后打印属性name的值

执行上面的程序:

D:\node.js\0211>node test.jsHello TesterHomeD:\node.js\0211>

知识点

exports

第一个文件testerhome.js中我们用到exports这个关键字,这个关键字定义的就是接口,可以供外部调用的。

单次加载

在test.js中我们使用require来加载一个模块,那如果多次加载的话会出现什么状况,现在修改下test.js中代码:

//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');var testerHome1 = require('./testerhome');testerHome1.setName('Tester Home2');testerHome.sayName();

上面的程序我们重新加载了一次模块并将其赋予了testerHome1变量。然后运行程序

D:\node.js\0211>node test.jsHello Tester Home2

你会惊奇的发现打印了第二个对象设置的名称,为什么?因为模块不会重复加载,只会覆盖。所以整个程序只会有一个模块对象,所以上面的testerHome和testerHome1指向的都是同一个对象。

给模块添加对象

如果我们想给刚才的testerhome模块添加一个对象,如何添加呢?
请看下面的代码:

//testerhome.jsvar nameexports.setName = function(theName){    name = theName;};exports.sayName = function(){    console.log('Hello ' + name);};function World(){    var name    this.setName = function(theName){        name = theName;    };    this.sayName = function(){        console.log('Hello ' + name);    };};exports.World = World;

如何引用这个对象,其实我们事件那一篇文章用过,当时用的是events模块中的EventEmitter对象。

我们在test.js使用该World对象:

//test.jsvar testerHome = require('./testerhome');testerHome.setName('TesterHome');testerHome.sayName();var World = require('./testerhome').World;var world = new World;world.setName('World');world.sayName();

运行该程序:

D:\node.js\0211>node test.jsHello TesterHomeHello WorldD:\node.js\0211>

还有一种方式,导入的时候不用写.World。直接new对象的。修改testerhome.js文件:

//testerhome.jsvar nameexports.setName = function(theName){    name = theName;};exports.sayName = function(){    console.log('Hello ' + name);};function World(){    var name    this.setName = function(theName){        name = theName;    };    this.sayName = function(){        console.log('Hello ' + name);    };};module.exports = World;

变化的地方在于最后一句话把exports.World变成了module.exports。这样我们在外部调用的时候就不需要再加入.World。test.js程序修改如下:

//test.jsvar World = require('./testerhome');var world = new World;world.setName('World');world.sayName();

运行该程序

D:\node.js\0211>node test.jsHello World
0 0
原创粉丝点击