2012-05-09 6 views
12

Tutti i plugin jQuery per Twitter Bootstrap seguono lo stesso schema di base per definire una classe che controlla il comportamento del plug-in. Verso la fine, lo fanno:

$.fn.alert.Constructor = Alert 

Che cosa sta facendo?

Suppongo che questo stia definendo un costruttore prototipo, ma usano un maiuscolo C. Il caso non importa qui? Oltre a ciò, non capisco cosa stia facendo e come sia usato dal plugin.

A titolo di esempio, ecco il plugin Alert: https://github.com/twitter/bootstrap/blob/master/js/bootstrap-alert.js

risposta

24

Non c'è magia qui, Constructor (grande C) come una proprietà non ha alcun significato particolare. Questa è semplicemente una convenzione.

Fondamentalmente si utilizza una classe come struttura da definire la funzionalità

var Alert = function() {}; 
Alert.prototype.foo = function() {}; 

ed esponendo attraverso un non-classe come l'interfaccia.

$('#blurf').alert(); 

Quindi questa è semplicemente una convenzione plugin utile. Ogni plugin jQuery definisce se stesso come metodo primario sull'oggetto $.fn, che ha accesso ai costruttori necessari tramite la chiusura. Ma il costruttore stesso è privato di quella chiusura. Assegnarlo a $.fn.myplugin.Constructor fa semplicemente che il costruttore accessibile ad altro codice, che consente di avere un controllo avanzato se necesary

var myAlert = new $.fn.alert.Constructor('Hello World'); // or something 

Ora è possibile qualcosa di simile a questo, invece:

$.fn.alert.Alert = Alert; 

Questo è, soggettivamente, brutto e ridondante. E ora dovresti tradurre o indovinare il nome della proprietà che porta al costruttore. Se dici che ogni plugin è implementato con una singola classe, e ogni costruttore di classi può essere trovato a $.fn.myplugin.Constructor, allora hai un'interfaccia coerente per accedere alle classi dietro ciascun plugin.

Quindi, ancora una volta, questo è solo convenzione, niente di troppo speciale.