首頁 web前端 js教程 seaJs中關於exports和module.exports的差異詳解

seaJs中關於exports和module.exports的差異詳解

Oct 14, 2017 am 10:13 AM
javascript

這篇文章主要介紹了seaJs使用心得之exports與module.exports的區別,結合實例形式分析了exports與module.exports具體功能、使用方法及相關操作注意事項,需要的朋友可以參考下

本文實例講述了seaJs使用心得之exports與module.exports的差異。分享給大家供大家參考,具體如下:

1. exports 是module.exports 的輔助對象,exports對外提供api 時需要用return 返回exports 對象

2. module.exports 也可直接向外提供api

參考:https://github.com/seajs/seajs/issues/242

exports Object





##exports 是一個對象,用來向外提供模組介面。


define(function(require, exports) {
 // 对外提供 foo 属性
 exports.foo = 'bar';
 // 对外提供 doSomething 方法
 exports.doSomething = function() {};
});
登入後複製

除了增加 exports 物件成員,還可以使用 return 直接向外提供介面。

define(function(require) {
 // 通过 return 直接提供接口
 return {
  foo: 'bar',
  doSomething: function() {}
 };
});
登入後複製
如果return 語句是模組中的唯一程式碼,也可以簡化為:

define({
 foo: 'bar',
 doSomething: function() {}
});
登入後複製

上面這種格式特別適合定義JSONP 模組。

特別注意:下面這種寫法是錯的!


define(function(require, exports) {
 // 错误用法!!!
 exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});
登入後複製

正確的寫法是用return 或給module.exports 賦值:

define(function(require, exports, module) {
 // 正确写法
 module.exports = {
  foo: 'bar',
  doSomething: function() {}
 };
});
登入後複製

#: exports 只是module.exports 的一個引用。在 factory 內部重新賦值 exports 時,並不會改變 module.exports 的值。因此給 exports 賦值是無效的,不能用來更改模組介面。


module.exports Object#############目前模組對外提供的介面。 ######傳給 factory 建構方法的 exports 參數是 module.exports 物件的一個參考。只透過 exports 參數來提供接口,有時無法滿足開發者的所有需求。 例如當模組的介面是某個類別的實例時,就需要透過module.exports來實現:#############
define(function(require, exports, module) {
 // exports 是 module.exports 的一个引用
 console.log(module.exports === exports); // true
 // 重新给 module.exports 赋值
 module.exports = new SomeClass();
 // exports 不再等于 module.exports
 console.log(module.exports === exports); // false
});
登入後複製
######注意:對module.exports 的賦值需要同步執行,不能放在回調函數裡###。下面這樣是不行的:############
// x.jsdefine(function(require, exports, module) {
 // 错误用法
 setTimeout(function() {
  module.exports = { a: "hello" };
 }, 0);
});
登入後複製
###在 y.js 裡有呼叫到上面的 x.js:###########
// y.jsdefine(function(require, exports, module) {
 var x = require('./x');
 // 无法立刻得到模块 x 的属性 a
 console.log(x.a); // undefined
});
登入後複製

以上是seaJs中關於exports和module.exports的差異詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

簡易JavaScript教學:取得HTTP狀態碼的方法

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript與WebSocket:打造高效率的即時天氣預報系統

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

javascript如何使用insertBefore

如何在JavaScript中取得HTTP狀態碼的簡單方法 如何在JavaScript中取得HTTP狀態碼的簡單方法 Jan 05, 2024 pm 01:37 PM

如何在JavaScript中取得HTTP狀態碼的簡單方法

See all articles