2015-06-20 96 views
6

以下代碼的用途是什麼?工廠功能在這裏做什麼?這裏root是窗口對象。工廠是默認的Java腳本函數嗎?在哪種情況下可以使用這種類型的代碼。此代碼來自toggle.js from Simon Tabor。 Zepto和恩德是圖書館。這主要用於圖書館嗎?'typeof define ==='function'&& define ['amd']'用於什麼?

if (typeof define === 'function' && define['amd']) { 
     define(['jquery'], factory); 
    } else { 
     factory(root['jQuery'] || root['Zepto'] || root['ender'] || root['$']|| $); 
    } 
+0

它是require.js的一部分 – Legends

回答

14

此代碼檢查是否存在require.js,即JavaScript依賴項管理庫。

如果'define'不是未定義的,並且它是一個函數,並且'amd'(異步模塊定義)也被定義了,那麼代碼假定require.js正在運行。

如果是這樣,那麼它定義'工廠'並將jQuery作爲依賴項傳遞給它。否則,它通過將代碼附加到根對象來設置代碼所需的依賴關係。

至於'工廠'是什麼:它不是由Javascript框架定義的,它最有可能是同一個文件中的一個函數。它將採用參數jQuery。

+0

我還有一個問題。在[Vue.js](https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js)我可以看到'typeof define ==='function'&& define.amd?定義(工廠)'。沒有圖書館名稱的工廠定義的目的是什麼?我需要時如何才能訪問它?我的意思是我不能寫'require(['vue'],vue => console.log')。它不適用於我,因爲圖書館沒有名字。謝謝! –

+0

只是爲了澄清。我無法在我的'window'上獲得Vue,而且我無法使用'require'來獲取Vue,因爲我得到了'不匹配的匿名define()模塊'。 [Here](https://stackoverflow.com/questions/15371918/mismatched-anonymous-define-module)被描述爲我們不能使用匿名定義:_你有一個匿名定義(「調用define()字符串ID「)在它自己的腳本標記中(我假設它們是指全球範圍內的任何地方)_。所以,我不明白爲什麼框架以這種方式實現這個'define'邏輯。再次感謝! –

+0

我不知道vue.js你應該問一個全新的問題。 –

相關問題