jQuery.extend( target [, object1] [, objectN] )
引数
- deep (Optional)
- Boolean true でdeepCopy
- (Object)target
- 拡張されるオブジェクト
- (Object)object1
- このオブジェクトが持つプロパティやメソッドがtargetに追加される
- (Object)objectN
- いくつでも追加できる
戻り値
- Object
- targetにobject1(objectN)のプロパティ、メソッドが追加されたもの
プラグインでよく見かけるのはこんなやつ。
プラグイン制作者がデフォルト値を設定しておくことで、利用者が必要なものだけの最小限の設定で動くようにする。
サンプル
Javascript
var Extend = function(options) {
this.params = jQuery.extend({
name: 'default',
domain: 'example.com'
}, options);
alert(jQuery.param(this.params));
}
$('.execute1').click(function(){
new Extend({ domain: 'kantenna.com' });
});
HTML
<div class="jqTest">
<input type="button" value="execute1" class="execute1"/>
</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
var test = {
counter: {
count: 0,
up : function() { ++this.count; },
get : function() { return this.count; }
}
};
$('.execute2').click(function(){
// 浅いコピー test.counter.countは0
// test.counterとobj1.counterは同じオブジェクト
var obj1 = jQuery.extend({}, test);
// test.counterとobj1.counterは同じなので
// どちらもcountが 1 となる。
test.counter.up();
// 浅いコピー
var obj2 = jQuery.extend({}, test);
// test.counter、obj1.counter、obj2.couterは
// 全て同じオブジェクトを参照している。
alert(test.counter.get() + ':' + obj1.counter.get() + ':' + obj2.counter.get());
});
/* -------------------------------------------- */
var test2 = {
counter: {
count: 0,
up : function() { return ++this.count; },
get : function() { return this.count; }
}
};
$('.execute3').click(function(){
// 深いコピー test2.counterとobj1.counterは別物
var obj1 = jQuery.extend(true, {}, test2);
// test2.counterへの変更はobj1.counterに影響しない
test2.counter.up();
// 浅いコピー test2.counterとobj2.counterは
// 同じオブジェクト
var obj2 = jQuery.extend({}, test2);
alert(test2.counter.get() + ':' + obj1.counter.get() + ':' + obj2.counter.get());
});
HTML
<div class="jqTest">
<input type="button" value="execute2" class="execute2"/><br />
<input type="button" value="execute3" class="execute3"/>
</div>
引数がオブジェクト一つの場合、jQuery関数の拡張になる。