1
- # jQueryのPlugin
1
+ # jQuery
2
2
3
3
jQueryでは` $.fn ` を拡張する事で、` $() ` の返り値であるjQueryオブジェクトにメソッドを追加することが出来ます。
4
4
@@ -15,6 +15,46 @@ jQueryでは`$.fn`を拡張する事で、`$()`の返り値であるjQueryオブ
15
15
16
16
## どういう仕組み?
17
17
18
+ このjQueryプラグインがどのような仕組みで動いているのかを見てみましょう。
19
+
20
+ jQueryプラグインはprototype拡張のように ` $.fn.greenify = function (){} ` と拡張するルールでした。
21
+
22
+ ` jQuery.fn ` の実装を見てみると、実態は` jQuery.prototype ` であるため実際にprototype拡張していることがわかります。
23
+
24
+ ```
25
+ // https://github.com/jquery/jquery/blob/2.1.4/src/core.js#L39
26
+ jQuery.fn = jQuery.prototype = {
27
+ // prototypeの実装
28
+ }
29
+ ```
30
+
31
+
32
+ ` $() ` は内部的に` new ` をしてjQueryオブジェクトを返すので、このjQueryオブジェクトではprototypeに拡張したメソッドが利用できます。
33
+
34
+ ```
35
+ $(document.body); // 返り値はjQueryのインスタンス
36
+ ```
37
+
38
+ つまり、jQueryプラグインはJavaScriptのprototypeをそのまま利用しているだけに過ぎないということがわかります。
39
+
40
+ ## どういう用途に向いている?
41
+
42
+ jQueryプラグインの仕組みがわかったのでどういう用途に有効な仕組みなのか考えてみましょう。
43
+
44
+ 単純なprototype拡張であると言えるので、利点はJavaScriptのprototypeと同様と言えるかもしれません。
45
+ 動的にメソッドを追加するだけではなく、既存の実装を上書きするmonkey patchのようなものもプラグインとして追加することができます。
46
+
47
+ ## どういう用途に向いていない?
48
+
49
+ これもJavaScriptのprototypeと同様で、prototypeによる拡張は柔軟すぎるため、
50
+ jQuery自体がプラグインのコントロールをすることが難しいです。
51
+
52
+ また、プラグインが拡張するjQueryの実装に依存し易いため、
53
+ jQueryのバージョンによって動かなくなるプラグインが発生しやすいです。
54
+
55
+ jQueryではそこをどうやってカバーしているかというと、
56
+ ドキュメント化されてないAPIは触っていけないというルールを設けているだけとなっています。
57
+
18
58
## 実装してみよう
19
59
20
60
` calculator ` という拡張可能な計算機をjQuery Pluginと同じ方法で作ってみたいと思います。
@@ -49,4 +89,20 @@ calculator.fn = calculator.prototype;
49
89
[ import, calculator-example.js] ( ../../src/jQuery/calculator-example.js )
50
90
51
91
実装をみてもらうと分かりますが、JavaScriptの` prototype ` の仕組みをそのまま利用しています。
52
- そのため、特別な実装は必要なく「拡張する時は` calculator.prototype ` の代わりに` calculator.fn ` を拡張して下さい」というルールがあるだけとも言えます。
92
+ そのため、特別な実装は必要なく
93
+ 「拡張する時は` calculator.prototype ` の代わりに` calculator.fn ` を拡張して下さい」
94
+ というルールがあるだけとも言えます。
95
+
96
+ ## まとめ
97
+
98
+ ここではjQueryプラグインの仕組みや実装について学びました。
99
+
100
+ - jQueryプラグインは ` jQuery.fn ` を拡張する
101
+ - ` jQuery.fn ` は ` jQuery.prototype ` と同じである
102
+ - jQueryプラグインとは` jQuery.prototype ` を拡張したものといえる
103
+ - 柔軟であるが、プラグインが行うことを制御することが難しい
104
+
105
+ ## 参考資料
106
+
107
+ [ Plugins | jQuery Learning Center] ( https://learn.jquery.com/plugins/ " Plugins | jQuery Learning Center ")
108
+ - [ jQuery拡張の仕組み 〜 JSおくのほそ道 #013 - Qiita] ( http://qiita.com/hosomichi/items/29b19ed3ebd0df9361ae )
0 commit comments