多个参数
文档在解释扩展如何工作时并不精确,所以我运行了一个小测试:
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”是覆盖的有效值,但“undefined”不是。
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
单参数
如果您只将一个对象传递给jQuery.extend()
,则 jQuery 假定jQuery
对象本身是“第一个”参数(即:要修改的参数),而您的对象是“第二个”(即:要添加到第一个的对象)。
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
结果:
Before: undefined
After: 1
它将一个对象的内容合并到另一个对象,如果我们传递两个对象,则第二个对象属性被添加到第一个对象 / 第一个参数
Ex: $.extend(object1, object2);
现在object1 包含 object2 的属性
如果要合并两个对象,则需要在第一个参数中传递空对象
Ex: var newObject = $.extend({}, object1, object2);
现在newObject 包含 object1 和 object2 的属性。
从 jQuery 文档
将两个或多个对象的内容合并到第一个对象中。
在插件上下文中:如果用户没有为函数设置可选参数,则将使用默认值代替。
extend () 如何在 jQuery 中工作?[已解决]
jQuery 有深拷贝和轻拷贝。第一个布尔值决定它,true 为 deep,false 为 light。
例如:
jQuery.extend (false,{'a':{'a1':1}},{'a':{'a2':2}})
结果将是:{'a':{'a2':2}} 因为这是光复制只是比较水平 1。
jQuery.extend (true,{'a':{'a1':1}},{'a':{'a2':2}})
结果将是:{'a':{'a1':1,'a2':2}} 这是许多级别的对象的深度复制(就像数组级别)
jQuery.extend(a,b,c)与 a,b,c 是对象或数组。流 overrite 将 b-& gt;a,c-& gt;a(b overrite a,c override a...)这个函数将返回 a 和 a 也改变值。
高级示例:
jQuery.extend ({'number_param':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-& gt;a,c-& gt;a,d-& gt;a,e-& gt;a,f-& gt;a (b override a,c override a...)。
with a = {'p':1}.jQuery.extend (a,{'p':2},{'p':3},{'p':4},{'p':5}) 将返回 a 和 a = {'p':6}。传递给此函数的参数数量不受限制。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(53条)