jQuery.extend
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) | Boolean | If set, the merge becomes recursive (i.e. deep copy). |
target | Object | The object to extend. |
object1 | Object | The object that will be merged into the first. |
objectN (Optional) | Object | More objects to merge into the first. |
使い方
引数に何をいくつ指定したかによって挙動が異なる。
雑感
- 別に上書き防止みたいなことはしてないっぽい
- 関数だけじゃなくて他のプロパティもコピーする
- 関数を複数定義しない限りはjQuery.fn.hoge = function () {};みたいな感じで直接代入してもいいかも