2012-05-09 21 views
12

の$ .fn.foo.Constructor = Fooの目的は何ですか?TwitterブートストラップのjQueryプラグインはすべて、プラグインの動作を制御するクラスを定義するのと同じ基本パターンに従います。最終的に、彼らはこれを行う:TwitterのブートストラップJS

$.fn.alert.Constructor = Alert 

これは何ですか?

これはプロトタイプのコンストラクタを定義していると仮定していますが、大文字のCを使用しています。それを超えて、私はこれが何をしているのか、それがプラグインによってどのように使用されているのかを本当に理解していません。 https://github.com/twitter/bootstrap/blob/master/js/bootstrap-alert.js

答えて

24

プロパティは特別な意味を持っていないとして、ここでは魔法、Constructor(ビッグC)はありません。

は例として、ここではアラートプラグインです。これは単に慣例にすぎません。

基本的には機能

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

および非クラスようなインターフェースを介して露光を定義する構造体のようなクラスを使用しています。

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

これは単に便利なプラグインの規約です。各jQueryプラグインは、$.fnオブジェクトのプライマリメソッドを定義します。このメソッドは、クロージャを介して必要なコンストラクタにアクセスできます。しかし、コンストラクタ自体はそのクロージャーに対してプライベートです。 $.fn.myplugin.Constructorに割り当てるだけで、他のコードへのコンストラクタにアクセスできるようになり、necesary

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

場合は、今、あなたは、高度なコントロールを持っている代わりに、このようなものができた可能:

$.fn.alert.Alert = Alert; 

これは、主観的に、醜いですし、冗長です。そして、コンストラクタにつながるプロパティ名を変換または推測する必要があります。各プラグインが単一のクラスで実装されていて、各クラスのコンストラクタが$.fn.myplugin.Constructorにあるとすれば、各プラグインの背後にあるクラスにアクセスするための一貫したインターフェイスがあります。

これもやはり慣習であり、それについては特別なことはありません。

関連する問題