私はこれをプラグインで見ました:
var options = $.extend(defaults, options);
それはどのように機能しますか?
何をしextend()
ますか?
私はこれをプラグインで見ました:
var options = $.extend(defaults, options);
それはどのように機能しますか?
何をしextend()
ますか?
回答:
ドキュメントは、extendがどのように機能するかを説明する上で正確ではないため、少しテストを実行しました。
var a = {foo: 1, bar: 1};
var b = {foo: 2, baz: 2};
var c = {foo: 3};
var r = jQuery.extend(a,b,c);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar + " Baz=" + a.baz);
console.log("B: Foo=" + b.foo + " Bar=" + b.bar + " Baz=" + b.baz);
console.log("C: Foo=" + c.foo + " Bar=" + c.bar + " Baz=" + c.baz);
console.log("R: Foo=" + r.foo + " Bar=" + r.bar + " Baz=" + r.baz);
console.log("A === R?: " + (a === r));
(このconsole.log
関数はFirebugで機能することを目的としています。必要に応じて、alert()または他の出力関数に置き換えてください)。
結果は次のとおりです。
A: Foo=3 Bar=1 Baz=2
B: Foo=2 Bar=undefined Baz=2
C: Foo=3 Bar=undefined Baz=undefined
R: Foo=3 Bar=1 Baz=2
A === R?: true
これにより、jQuery.extend()がわかります。
これは、ユーザーとデフォルトのオプションオブジェクトを組み合わせてオプションの完全なセットを取得するのに役立ちます。
function foo(userOptions) {
var defaultOptions = {
foo: 2,
bar: 2
};
var someOtherDefaultOptions = {
baz: 3
};
var allOptions = jQuery.extend(
defaultOptions,
someOtherDefaultOptions,
userOptions
);
doSomething(allOptions);
}
foo({foo:1, baz:1});
「null」は上書きに有効な値ですが、「未定義」は上書きできないことに注意してください。これを利用できるかもしれません。
var a = {foo: "a", bar: "a"};
var b = {foo: null, bar: undefined};
jQuery.extend(a,b);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar);
結果:
A: Foo=null Bar=a
にオブジェクトを1つだけ渡すとjQuery.extend()
、jQueryはjQuery
オブジェクト自体が「最初の」パラメーター(つまり、変更されるパラメーター)であり、オブジェクトが「2番目のパラメーター」(つまり、最初に追加するパラメーター)であると想定します。 。そう:
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
結果:
Before: undefined
After: 1
{zed: 'dark'}
なく、2
と設定しr.baz.zed = 'light'
た場合、の値はどうb.baz.zed
なりますか?つまり、プロパティは参照によってコピーまたはマージされますか?
あるオブジェクトのコンテンツを別のオブジェクトにマージします。2つのオブジェクトを渡す場合、2番目のオブジェクトプロパティが最初のオブジェクト/最初のパラメーターに追加されます
Ex: $.extend(object1, object2);
これで、object1にはobject2のプロパティが含まれます
2つのオブジェクトをマージする場合は、最初のパラメータで空のオブジェクトを渡す必要があります
Ex: var newObject = $.extend({}, object1, object2);
これで、newObjectにはobject1とobject2の両方のプロパティが含まれます。
jQueryドキュメントから
2つ以上のオブジェクトの内容を最初のオブジェクトにマージします。
プラグインコンテキスト:ユーザーが関数のオプションパラメータを設定しない場合、代わりにデフォルト値が使用されます。
extend()はjQueryでどのように機能しますか?[解決済み]
jQueryにはディープコピーとライトコピーがあります。最初のブール値がそれを決定します。深い場合はtrue、光の場合はfalseです。
例えば:
jQuery.extend(false、{'a':{'a1':1}}、{'a':{'a2':2}})
結果は次のようになります:{'a':{'a2':2}}これは単純なコピーなので、レベル1を比較するだけです。
jQuery.extend(true、{'a':{'a1':1}}、{'a':{'a2':2}})
結果は次のようになります。
jQuery.extend(a、b、c)とa、b、cはオブジェクトまたは配列です。フローオーバーライトはb-> a、c-> a(bオーバーライトa、cオーバーライドa ...)となり、この関数はaを返し、値も変更します。
高度な例:
jQuery.extend({'number_param':1})
1つのパラメーターを渡す場合。jQueryはそれ自体を拡張します。console.log(jQuery ['number_param'])は1を出力します。
jQuery.extend(1、{'number_param': '2'}); この例は、jQuery自体を追加するものではありません。最初のパラメーターはブール値でなければなりません。この場合、{'number_param': '2'}が返され、jQueryは更新されません。
jQuery.extend(a、b、c、d、e、f); 注文のマージはになります。b-> a、c-> a、d-> a、e-> a、f-> a(bオーバーライドa、cオーバーライドa ...)結果の返却はaになります。
a = {'p':1}。jQuery.extend(a、{'p':2}、{'p':3}、{'p':4}、{'p':5})はaを返し、a = {'p': 6}。この関数に渡されるパラメーターの数は無制限です。
目的は、既存のオブジェクトを拡張することです。たとえば、テンプレートオブジェクトがあり、それをさらにプロパティを追加するか、既存のプロパティをオーバーライドして拡張する場合、jquery extendが役立ちます。
var carObjectTemplate = {
"make": "honda",
"model":"city",
"mileage":"20",
"variant":"petrol"
};
これを拡張したい場合は、出力
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
が得られます。carObjectTemplateを拡張し、
{"color":"red"} property and overriding "model" property from "city" to "amaze"
最初のブールパラメータtrue / falseは、深いコピーまたは浅いコピーが必要かどうかを示します