2015-06-20 18 views
6

A cosa serve il seguente codice? Cosa fa la funzione di fabbrica qui? Qui la radice è l'oggetto finestra. Factory è una funzione predefinita di script java? In che tipo di scenari è possibile utilizzare questo tipo di codice. Questo codice è da toggle.js from Simon Tabor. Zepto e ender sono librerie. È usato principalmente nelle biblioteche.Cosa si intende per 'typeof define ===' function '&& define [' amd ']'?

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

fa parte di require.js – Legends

risposta

14

Questo codice verifica la presenza di require.js, una libreria JavaScript gestione delle dipendenze.

Se 'define' non è indefinito ed è una funzione e 'amd' (definizione del modulo asincrono) viene anche definito, il codice assume che require.js sia in riproduzione.

Se è così, definisce "factory" e passa a jQuery come dipendenza. Altrimenti imposta le dipendenze di cui il codice ha bisogno collegandole all'oggetto radice.

Per quanto riguarda "factory": non è definito dal framework Javascript, sarà una funzione nello stesso file molto probabilmente. Prenderà il parametro jQuery.

+0

Ho ancora una domanda. In [Vue.js] (https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js) posso vedere 'typeof define === 'function' && define.amd? define (fabbrica) '. Qual è lo scopo della definizione di fabbrica senza il nome di una biblioteca? Come potrò accedervi quando ne avrò bisogno? Voglio dire che non posso scrivere qualcosa come 'require (['vue'], vue => console.log'). Non funziona per me perché la libreria è stata definita senza un nome. Grazie! –

+0

Giusto per chiarire. Non riesco ad ottenere Vue sulla mia 'finestra' e non riesco a ottenere Vue con' require' perché sto ottenendo 'Mismatched anonymous define() module'. [Qui] (https://stackoverflow.com/questions/15371918/mismatched-anonymous-define-module) è stato descritto che non possiamo usare definizioni anonime: _Sei definito anonimo ("moduli che chiamano define() senza stringa ID ") nel proprio tag di script (presumo che in realtà significhi ovunque nello scope globale) _. Quindi, non capisco perché i framework implementino questa logica "define" in questo modo. Grazie ancora! –

+0

Non conosco vue.js dovresti fare una domanda totalmente nuova. –