您好,登錄后才能下訂單哦!
我們做東西不可能把所有的功能都放在一起,那樣會(huì)相互影響,我們需要把他們分門別類,
讓他們各自執(zhí)行各自的功能,這就是包或者模塊,包和模塊這兩個(gè)概念經(jīng)常地會(huì)用,其實(shí)他倆講的是一個(gè)東西
而在node.js中一個(gè)文件就是一個(gè)包
下面我們就來具體的講解一下:
Node.js 提供了 exports 和 require 兩個(gè)對(duì)
象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個(gè)模塊的接口,即所獲
取模塊的 exports 對(duì)象。
讓我們以一個(gè)例子來了解模塊。
創(chuàng)建一個(gè)module.js的文件,內(nèi)容如下
var name; function setName(thyName){ name = thyName; }; function sayHello(){ console.log('Hello ' + name); }; //導(dǎo)出模塊 exports.setName = setName; exports.sayHello = sayHello; 再創(chuàng)建一個(gè)文件getmodule.js //獲取模塊 require('./文件名'),不需要后綴 var myModule = require('./module'); myModule.setName('MyDuoEr'); myModule.sayHello();
運(yùn)行命令
這個(gè)例子有點(diǎn)類似于創(chuàng)建一個(gè)對(duì)象,但實(shí)際上和對(duì)象又有本質(zhì)的區(qū)別,因?yàn)?br />require 不會(huì)重復(fù)加載模塊,也就是說無論調(diào)用多少次 require,獲得的模塊都是同一個(gè)。
我們?cè)?getmodule.js 的基礎(chǔ)上稍作修改:
//獲取模塊 var hello1 = require('./module'); hello1.setName('MyDuoEr'); var hello2 = require('./module'); hello2.setName('MyDuoEr 2'); hello1.sayHello();
運(yùn)行命令
運(yùn)行后發(fā)現(xiàn)輸出結(jié)果是 Hello MyDuoEr 2,這是因?yàn)樽兞?hello1 和 hello2 指向的是
同一個(gè)實(shí)例,因此 hello1.setName 的結(jié)果被 hello2.setName 覆蓋,最終輸出結(jié)果是
由后者決定的。
覆蓋 exports
有時(shí)候我們只是想把一個(gè)對(duì)象封裝到模塊中,例如:
function Hello() { var name; this.setName = function (thyName) { name = thyName; }; this.sayHello = function () { console.log('Hello ' + name); }; };
exports.Hello = Hello;
此時(shí)我們?cè)谄渌募行枰ㄟ^ require('./singleobject').Hello 來獲取
Hello 對(duì)象,這略顯冗余,可以用下面方法稍微簡(jiǎn)化:
function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; }; module.exports = Hello;
這樣就可以直接獲得這個(gè)對(duì)象了:
var Hello = require('./hello'); hello = new Hello(); hello.setName('MyDuoEr'); hello.sayHello();
注意,模塊接口的唯一變化是使用 module.exports = Hello 代替了 exports.Hello=
Hello。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。