jQuery.fn.extend は、1 つ以上のサンプル オブジェクトを通じてオブジェクトを拡張できる拡張メカニズムを提供します。拡張するオブジェクトが指定されていない場合は、それ自体に拡張されます。
jQuery.extend は、jQuery.fn.extend を通じて使用することもできます。jQuery では、ターゲット オブジェクトのメンバーを拡張するためによく使用されます。拡張されたメンバーは、一連の参照オブジェクトから取得されます。
これにより、jQuery.fn 拡張メンバーのデータを削除する必要がある場合、次のように行うことができます。
jQuery.fn.extend(
{
removeData: function( key ) {
return this.each(function() {
jQuery.removeData( this, key );
});
}
}
) ;
extend のソースコードは以下のとおりです。比較的シンプルなので、あまり簡略化していません。
///
2
3
4 jQuery.extend = jQuery.fn.extend = function () {
5 // ターゲット オブジェクトへの参照をコピー
6 var target = argument[0] || {}, i = 1, length = argument.length, deep = false, options, name, src, copy;
7
8 // ディープコピーの場合、最初のパラメータはブール型でディープコピーを表し、2 番目のパラメータはターゲットオブジェクトです。
9 if (typeof target === "boolean") {
deep = target; = argument[1] || {};
// ブール値とターゲットをスキップします
}
// ターゲットがオブジェクトまたは関数でない場合
if (typeof target !== "object" && !jQuery.isFunction(target)) {
target = {};
}
// パラメータが 1 つしかない場合は、それ自体を展開します
if (length === i) {
target = this;
--i;
}
// すべての参照オブジェクトを走査し、ターゲット オブジェクトに展開します
for (; i < length; i ) {
// null 以外/未定義の値のみを処理します
if ((options = argument[i]) != null) {
// 基本オブジェクトを拡張します
for (name in options) {
src = target[name];
copy = options[name];
// 無限ループを防止
if (target === copy) {
Continue;
}
/ / オブジェクト リテラル値または配列をマージする場合は再帰
if (deep && copy && (jQuery.isPlainObject(copy) || jQuery.isArray(copy) ))) {
var clone = src && (jQuery.isPlainObject(src) || jQuery.isArray(src)) ? src
: jQuery.isArray(copy) ? 🎜>// 元のオブジェクトは移動せず、クローンを作成します。
target[name ] = jQuery.extend(deep, clone, copy)
// 未定義の値を取り込まない
} else if (copy !== 未定義) {
target[name] = copy;
}
}
}
// 変更されたオブジェクトを返します
return target; 🎜>};