seajs實現了JavaScript 的 模塊開發及按模塊加載。用來解決繁瑣的js命名沖突,文件依賴等問題,其主要目的是令JavaScript開發模塊化并可以輕松愉悅進行加載。
首先看看seajs是怎么進行模塊開發的。使用seajs基本上只有一個函數“define”
fn.define= function(id,deps, factory) {//code of function…}使用define函數來進行定義一個模塊,根據 CMD (Common Module Definition)模塊定義規范。一個文件就是一個模塊。所以一個js文件中只有一個define,即一個文件是一個模塊,SeaJS中模塊的概念有點類似于面向對象中的類——模塊可以擁有數據和方法,數據和方法可以定義為公共或私有,公共數據和方法可以供別的模塊調用。
官方實例中,define只傳入一個參數: 一個工廠函數
define(function(require,exports, module) {//code of the module...});在看參數之前,我們先看看define是如何處理參數的:
fn.define = function(id, deps, factory)
define可以接收的參數分別是模塊ID,依賴模塊數組及工廠函數;
如果只有一個參數,則賦值給factory。
如果有兩個參數,第二個賦值給factory;第一個如果是array則賦值給deps,否則賦值給id。
如果有三個參數,則分別賦值給id,deps和factory。
根據官方實例,建議還是根據官方的來就傳遞一個參數,即只有factory參數,這樣的話模塊id默認為js文件路徑。
在來看看工廠函數的參數:
require, exports, module
使用factory的參數的使用:
define(function(require,exports, module) {var a = require('./a');//引入a模塊 exports.fun2= function(){alert("fun2");a.dosomething();  } }使用require對象來進行加載模塊,其實使用正則表達式進行驗證加載的,所以其參數必須是特定的字符串,不能是表達式。
seajs會自動在require的參數中加入".js"來進行加載,即不需要寫上后綴名,但是在某些情況下,seajs不會為其添加“.js”:
1.載入css:
require("./module1-style.css");2.路徑中含有“?”:
require(<a href="http://example/js/a.json?b=func" rel="external nofollow" >http://example/js/a.json?cb=func</a>);
新聞熱點
疑難解答
圖片精選