1. 程式人生 > >nodejs中exports與module.exports的區別詳細介紹

nodejs中exports與module.exports的區別詳細介紹

(轉自網際網路 版權歸原作者)

你肯定非常熟悉nodejs模組中的exports物件,你可以用它建立你的模組。例如:(假設這是rocker.js檔案)

程式碼如下:
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
}; 

在另一個檔案中你這樣引用 

複製程式碼程式碼如下:
var rocker = require('./rocker.js'); 
rocker.name(); // 'My name is Lemmy Kilmister' 

那到底Module.exports是什麼呢?它是否合法呢?

其實,Module.exports才是真正的介面,exports只不過是它的一個輔助工具。 最終返回給呼叫的是Module.exports而不是exports。

所有的exports收集到的屬性和方法,都賦值給了Module.exports。當然,這有個前提,就是Module.exports本身不具備任何屬性和方法。如果,Module.exports已經具備一些屬性和方法,那麼exports收集來的資訊將被忽略。

修改rocker.js如下: 
複製程式碼程式碼如下:
module.exports = 'ROCK IT!'; 
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
}; 

再次引用執行rocker.js 

複製程式碼程式碼如下:
var rocker = require('./rocker.js'); 
rocker.name(); // TypeError: Object ROCK IT! has no method 'name' 

發現報錯:物件“ROCK IT!”沒有name方法 
rocker模組忽略了exports收集的name方法,返回了一個字串“ROCK IT!”。由此可知,你的模組並不一定非得返回“例項化物件”。你的模組可以是任何合法的javascript物件--boolean, number, date, JSON, string, function, array等等。

你的模組可以是任何你設定給它的東西。如果你沒有顯式的給Module.exports設定任何屬性和方法,那麼你的模組就是exports設定給Module.exports的屬性。


下面例子中,你的模組是一個類: 
複製程式碼程式碼如下:
module.exports = function(name, age) { 
this.name = name; 
this.age = age; 
this.about = function() { 
console.log(this.name +' is '+ this.age +' years old'); 
}; 
}; 

可以這樣應用它: 
複製程式碼程式碼如下:
var Rocker = require('./rocker.js'); 
var r = new Rocker('Ozzy', 62); 
r.about(); // Ozzy is 62 years old 

下面例子中,你的模組是一個數組: 
複製程式碼程式碼如下:
module.exports = ['Lemmy Kilmister', 'Ozzy Osbourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger']; 

可以這樣應用它: 
複製程式碼程式碼如下:
var rocker = require('./rocker.js'); 
console.log('Rockin in heaven: ' + rocker[2]); //Rockin in heaven: Ronnie James Dio 

現在你明白了,如果你想你的模組是一個特定的型別就用Module.exports。如果你想的模組是一個典型的“例項化物件”就用exports。

給Module.exports新增屬性類似於給exports新增屬性。例如: 
複製程式碼程式碼如下:
module.exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
}; 

同樣,exports是這樣的 
複製程式碼程式碼如下:
exports.name = function() { 
console.log('My name is Lemmy Kilmister'); 
}; 

請注意,這兩種結果並不想同。前面已經提到module.exports是真正的介面,exports只不過是它的輔助工具。推薦使用exports匯出,除非你打算從原來的“例項化物件”改變成一個型別。

相關推薦

nodejsexportsmodule.exports區別詳細介紹

(轉自網際網路 版權歸原作者) 你肯定非常熟悉nodejs模組中的exports物件,你可以用它建立你的模組。例如:(假設這是rocker.js檔案) 程式碼如下: exports.name = function() {  console.log('My name

nodejsexportsmodule.exports區別

ons src uri 技術分享 20px boolean 微軟雅黑 是否 不一定 [原文] 你肯定非常熟悉nodejs模塊中的exports對象,你可以用它創建你的模塊。例如:(假設這是rocker.js文件)exports.name = function() {

Node.jsexportsmodule.exports區別

個數 error: years 信息 輸出 一個數 mil 導出 原來 一、exports使用 test.js exports.name = function() { console.log(‘張三‘); }; index.js使用 var test= req

node.jsexportsmodule.exports區別分析

前言 關於Node.js中的exports和module.exports,很多時候都比較容易讓人混淆,弄不清楚兩者間的區別。那麼我們就從頭開始理清這兩者之間的關係。 來源 在開發Node.js應用的時候,很多模組都是需要引入才能使用,但是為什麼exports和module.exports我們沒有引用卻可

exportsmodule.exports區別

構造方法 什麽 erro 學習 自己的 我只 屬性和方法 現在 內置 nodejs有自己的模塊系統,分為文件模塊和內置模塊。webpack是運行在node環境中,在學習vue-cli的webpack配置的時候, 發現有的文件模塊: exports.fun1=function

exportsmodule.exports區別,exportexport.defult區別

使用 es6 webpack 前端工程 關系 import 接口 的區別 通過 在JS模塊化編程中,之前使用的是require.js或者sea.js。隨著前端工程化工具webpack的推出,使得前端js可以使用CommonJS模塊標準或者使用ES6 moduel特性。 在C

Nodeexportsmodule.export的使用區別

module.exports與exports的介紹module.exports與exports都是將函式或者是方法暴露出去,require的時候進行呼叫,但是2者是有區別的。以下是程式碼://ex.js exports='danhuangmode'; //mex.js  module.exports='

Node.jsexportsmodule.exports區別

- exports 和 module.exports 的區別 + 每個模組中都有一個 module 物件 + module 物件中有一個 exports 物件 + 我們可以把需要匯出的成員都掛載到 module.exports 介面物件中 + 也就是:`mou

Nodeexportsmodule.exports區別

module.exports屬性 Node內部提供一個Module構建函式。所有模組都是Module的例項。每個模組內部,都有一個module物件,代表當前模組。它有以下屬性。 module.id 模組的識別符,通常是帶有絕對路徑的模組檔名。 module.filename

簡單說明 exports module.export的區別

exports:首先對於本身來講是一個變數(物件),它不是module的引用,它是{}的引用,它指向module.exports的{}模組module.exports:首先,module是一個變數,指向一塊記憶體,exports是module中的一個屬性,儲存在記憶體中,然後

Node.jsexportsmodule.exports以及require方法

bubuko lan ref isp 沒有 right target img .html 在Node.js中,使用module.exports.f = ...與使用exports.f = ...是一樣的,此時exports就是module.exports的一種簡寫方式。但是

exportsmodule.exports和export、export default區別

      在 Node 環境中,一個.js檔案就稱之為一個模組(module),每個檔案就是一個模組,有自己的作用域,在一個檔案裡面定義的變數、函式、類,都是私有的,對其他檔案不可見,而 Node 應用由模組組成,採用 CommonJS 模組規範

node.js exportsmodule.exports區別

要首先了解值型別以及引用型別 (1)值型別:字串(字串),數值(數),布林值(布林值),無,未定義 (2)引用型別:物件(物件),陣列(陣列),函式(功能) 值型別資料儲存在棧上,而引用型別資料儲存在堆上(此圖只為解釋堆疊,與下文的程式碼中變數無關係) 值型別:

Nodejsexportsmodule.exports

1>exports 其實是 module.exports 的一個引用 2>require()返回的是 module.exports 而不是 exports 所以,若我們使用 exp

js學習記錄之(一)require module.exports

1. js 裡面的程式碼可以放在不同的檔案裡,稱為程式碼模組2.當一個模組需要引用其他模組中程式碼的時候,就用require匯入相應的模組(使用程式碼塊),用module.exports指向一個程式碼塊(製作程式碼塊)3.  檔案1.js var codeUtils =

Node.js裡exportsmodule.exports區別

很早之前我就對exports和module.exports之間的區別產生了好奇,因為用起來感覺不出什麼區別但卻又是不同的用法。實際上,exports是module.exports的引用。 換句話說,模組最終返回的是module.exports給呼叫者而不是exports。 用圖舉例說

exportsmodule.exports區別

UNC mod exp 兩個 指向 異同 module node 技術分享 首先得明確兩個的含義 exports:首先對於本身來講是一個變量(對象),它不是module的引用,它是{}的引用,它指向module.exports的{}模塊 module.exports:首

【MM ECC VS S4】MM模塊ECCS4的區別

ships sap request down rac erro load 能力 業務 原文出自 https://blogs.sap.com/2017/04/28/comparison-of-simplification-and-functionality-in-s4-and

C#StructClass的區別

而是 適用於 ack 定義 cts 多態 支持 關鍵字 for class和struct最本質的區別是class是引用類型,而struct是值類型,它們在內存中的分配情況有所區別。 什麽是class? class(類)是面向對象編程的基本概念,是一種自定義數據結構類型,通

left joinwhereon的區別

where left 查詢 left join spa isa strong 通過 統計 舉例進行說明,我們現在有兩個表,即商品表(products)與sales_detail(銷售記錄表)。我們主要是通過這兩個表來對MySQL關聯left join 條件on與wh