HOME > > > > >

jQuery.extend()

jQuery.extend( target [, object1] [, objectN] )

引数

deep (Optional)
Boolean true でdeepCopy
(Object)target
拡張されるオブジェクト
(Object)object1
このオブジェクトが持つプロパティやメソッドがtargetに追加される
(Object)objectN
いくつでも追加できる

戻り値

Object
targetにobject1(objectN)のプロパティ、メソッドが追加されたもの

プラグインでよく見かけるのはこんなやつ。 プラグイン制作者がデフォルト値を設定しておくことで、利用者が必要なものだけの最小限の設定で動くようにする。

サンプル

実行結果

Javascript

  1. var Extend = function(options) {
  2.     this.params = jQuery.extend({
  3.         name: 'default',
  4.         domain: 'example.com'
  5.         }, options);
  6.  
  7.     alert(jQuery.param(this.params));
  8. }
  9.  
  10. $('.execute1').click(function(){
  11.     new Extend({ domain: 'kantenna.com' });
  12. });

HTML

  1. <div class="jqTest">
  2.     <input type="button" value="execute1" class="execute1"/>
  3. </div>

jQuery.extend( [deep], target, object1 [, objectN] )

引数

(boolean)deep
true でdeepCopy
(Object)target
拡張するオブジェクト
(Object)object1
このオブジェクトが持つプロパティやメソッドがtargetに追加される
(Object)objectN
いくつでも追加できる

戻り値

Object
targetにobject1(objectN)のプロパティ、メソッドが追加されたもの

object1がオブジェクトや配列を持っていた場合など利用する。

javascriptでのオブジェクト、配列の代入は参照が渡される。deepがfalse(デフォルト)の場合、 浅いコピーなどと呼ばれこの参照でマージされる。

deepをtrueにした場合は、深いコピーなどと呼ばれ値渡しとなる。

サンプル

実行結果


Javascript

  1. var test = {
  2.     counter: {
  3.         count: 0,
  4.         up   : function() { ++this.count; },
  5.         get  : function() { return this.count; }
  6.     }
  7. };
  8.  
  9. $('.execute2').click(function(){
  10.     // 浅いコピー test.counter.countは0
  11.     // test.counterとobj1.counterは同じオブジェクト
  12.     var obj1 = jQuery.extend({}, test);
  13.  
  14.     // test.counterとobj1.counterは同じなので
  15.     // どちらもcountが 1 となる。
  16.     test.counter.up();
  17.  
  18.     // 浅いコピー
  19.     var obj2 = jQuery.extend({}, test);
  20.  
  21.     // test.counter、obj1.counter、obj2.couterは
  22.     // 全て同じオブジェクトを参照している。
  23.     alert(test.counter.get() + ':' + obj1.counter.get() + ':' + obj2.counter.get());
  24. });
  25.  
  26. /* -------------------------------------------- */
  27.  
  28. var test2 = {
  29.     counter: {
  30.         count: 0,
  31.         up   : function() { return ++this.count; },
  32.         get  : function() { return this.count; }
  33.     }
  34. };
  35.  
  36. $('.execute3').click(function(){
  37.     // 深いコピー test2.counterとobj1.counterは別物
  38.     var obj1 = jQuery.extend(true, {}, test2);
  39.  
  40.     // test2.counterへの変更はobj1.counterに影響しない
  41.     test2.counter.up();
  42.  
  43.     // 浅いコピー test2.counterとobj2.counterは
  44.     // 同じオブジェクト
  45.     var obj2 = jQuery.extend({}, test2);
  46.  
  47.     alert(test2.counter.get() + ':' + obj1.counter.get() + ':' + obj2.counter.get());
  48. });

HTML

  1. <div class="jqTest">
  2.     <input type="button" value="execute2" class="execute2"/><br />
  3.     <input type="button" value="execute3" class="execute3"/>
  4. </div>

引数がオブジェクト一つの場合、jQuery関数の拡張になる。