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

本文介绍Node.js中的模块概念,包括创建、引用模块的方法,并通过实例演示如何定义和使用模块接口,探讨单次加载特性及向模块添加对象的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块是nodejs中重要的概念

创建模块

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

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

引用模块

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

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

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

执行上面的程序:

D:\node.js\0211>node test.js
Hello TesterHome

D:\node.js\0211>

知识点

exports

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

单次加载

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

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

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

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

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

给模块添加对象

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

//testerhome.js
var name
exports.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.js
var 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.js
Hello TesterHome
Hello World
D:\node.js\0211>

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

//testerhome.js
var name
exports.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.js
var World = require('./testerhome');
var world = new World;
world.setName('World');
world.sayName();

运行该程序

D:\node.js\0211>node test.js
Hello World
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值