nodejs入门03__模块创建和引用

本文介绍了Node.js中的模块创建、单次加载特性及模块封装方法,包括exports与module.exports的区别,并展示了如何通过require加载模块。

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

1.创建模块

Node.js提供了 exports 和 require 两个对象(接口),其中 exports 是模块公开的接口,用于创建外部模块;

require 用于从外部获取一个模块的接口,即所获取模块的 exports 的对象。

创建模块module.js:

var name;

exports.setName = function(theName){
	name = theName;
}
exports.sayHello = function(){
	console.log('Hello ' + name);
}
创建文件引入模块并执行getmodule.js:

var myModule = require('./module');
myModule.setName('Ming');
myModule.sayHello();
运行和输出:

PS D:\phpStudy\WWW\node> node .\getmodule.js
Hello Ming
module.js 通过 exports 对象把 setName 和 sayHello 作为模块的访问接口,在 getmodule.js 中通过 require('./module') 加载这个模块,然后就可以直接访问 module.js 中 exports 对象的成员函数。
2.单次加载

与对象不同的是,require并不会重复加载模块,也就是说无论调用多少次require,获得的模块有事同一个

loadmodule.js:

var hello1 = require('./module');
hello1.setName('Ming');

var hello2 = require('./module');
hello2.setName('Ming2');

hello1.sayHello();
运行和输出

PS D:\phpStudy\WWW\node> node .\loadmodule.js
Hello Ming2
为变量 hello1 和 hello2 指向的是同一个实例,因此 hello1.setName 的结果被 hello2.setName 覆盖,最终输出结果是由后者决定的。
3.模块封装(exports与module.exports)

singleobject.js:

function Hello(){
	var name;
	this.setName = function(theName){
		name = theName;
	};
	this.sayHello = function(){
		console.log('Hello ' + name);
	}
}

exports.Hello = Hello;
以上模块通过 require('./singleobject').Hello 来获取Hello 对象,这略显冗余,可以用下面方法稍微简化:
hello.js:

function Hello() {
 var name;

 this.setName = function(thyName) {
 name = thyName;
 };

 this.sayHello = function() {
 console.log('Hello ' + name);
 };
};
module.exports = Hello; 

这样通过require('./hello')能直接获取到该模块:

var Hello = require('./Hello');

hello = new Hello();
hello.setName('Ming');
hello.sayHello();

注意,模块接口的唯一变化是使用 module.exports = Hello 代替了 exports.Hello=Hello。在外部引用该模块时,其接口对象就是要输出的 Hello 对象本身,而不是原先的exports。

不可以通过对 exports 直接赋值代替对 module.exports 赋值。exports 实际上只是一个和 module.exports 指向同一个对象的变量,它本身会在模块执行结束后释放,但 module 不会,因此只能通过指定module.exports 来改变访问接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值