Hatena::Groupjavascript

willnetの日記

 | 

2009-12-22

jQuery.extend

20:29

jQueryのプロトタイプに関数を定義する方法 - willnetの日記 - g:javascriptで書いたようにjQuery.extend()がよくわかってかったので調べた。

jQuery日本語リファレンスだと説明が古いようなので本家のリファレンスを参照した。

Utilities/jQuery.extend - jQuery JavaScript Library


ソース

jQuery.extendとjQuery.fn.extendは同じ関数。

jQuery.extend = jQuery.fn.extend = function() {
	// copy reference to target object
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	// Handle a deep copy situation
	if ( typeof target === "boolean" ) {
		deep = target;
		target = arguments[1] || {};
		// skip the boolean and the target
		i = 2;
	}

	// Handle case when target is a string or something (possible in deep copy)
	if ( typeof target !== "object" && !jQuery.isFunction(target) )
		target = {};

	// extend jQuery itself if only one argument is passed
	if ( length == i ) {
		target = this;
		--i;
	}

	for ( ; i < length; i++ )
		// Only deal with non-null/undefined values
		if ( (options = arguments[ i ]) != null )
			// Extend the base object
			for ( var name in options ) {
				var src = target[ name ], copy = options[ name ];

				// Prevent never-ending loop
				if ( target === copy )
					continue;

				// Recurse if we're merging object values
				if ( deep && copy && typeof copy === "object" && !copy.nodeType )
					target[ name ] = jQuery.extend( deep, 
						// Never move original objects, clone them
						src || ( copy.length != null ? [ ] : { } )
					, copy );

				// Don't bring in undefined values
				else if ( copy !== undefined )
					target[ name ] = copy;

			}

	// Return the modified object
	return target;
};

リファレンス

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

deep (Optional)BooleanIf set, the merge becomes recursive (i.e. deep copy).
targetObjectThe object to extend.
object1ObjectThe object that will be merged into the first.
objectN (Optional)ObjectMore objects to merge into the first.

使い方

引数に何をいくつ指定したかによって挙動が異なる。

雑感

  • 別に上書き防止みたいなことはしてないっぽい
  • 関数だけじゃなくて他のプロパティもコピーする
  • 関数を複数定義しない限りはjQuery.fn.hoge = function () {};みたいな感じで直接代入してもいいかも

LouisaLouisa2011/07/23 12:27Your aenswr was just what I needed. It's made my day!

zadytiopzadytiop2011/07/23 23:10dWDro0 <a href="http://yphpnrswswhs.com/">yphpnrswswhs</a>

qnfzpmqnfzpm2011/07/25 20:394rp5rN <a href="http://wlraksolwpsh.com/">wlraksolwpsh</a>

wyyesdvwyyesdv2011/07/27 00:07XGVdOA , [url=http://tnclsuepwfbe.com/]tnclsuepwfbe[/url], [link=http://auqxeutlmmvw.com/]auqxeutlmmvw[/link], http://kfhdqpijboqb.com/

RanooshRanoosh2013/03/31 20:44So true. Honesty and evreytihng recognized.

xqkbrulxqkbrul2013/04/01 19:20gjDkTj <a href="http://mfutrpfzoooq.com/">mfutrpfzoooq</a>

kmgomqmkmgomqm2013/04/04 20:11xh3gkG , [url=http://rnabrvxdijhr.com/]rnabrvxdijhr[/url], [link=http://lxbhpcmffyzo.com/]lxbhpcmffyzo[/link], http://adcibmticmkx.com/

 |