我在Jquery in Action中找到了这段代码:
function complex(p1,options) {
var settings = $.extend({
options1: devaultVal1,
options2: devaultVal2,
options3: devaultVal3,
options4: devaultVal4,
options5: devaultVal5,
},options||{});
//remainder of function definition..
};
我不了解这种模式的三个方面:
$.extend()
函数将options
参数与第一个参数对象合并。如果我在调用complex()
时传递'可选'参数,它将如何与此对象绑定?
为什么创建了settings
个对象?这有什么用途?
OR语句的目的是什么?
提前致谢。
答案 0 :(得分:3)
指定选项的目的是为您提供默认值。如果您指定其中一个,那么您提供的值将覆盖默认值。
settings是将在整个函数中使用的对象。它可以很容易地被称为选项,并将覆盖传递给函数的选项的值。
如果选项为null,则可以防止出现错误。它表示use options,如果为null,则使用空对象文字。
让我们看一些例子:
function complex(p1,options) {
var settings = $.extend({
option1: "val1",
option2: "val2"
},options||{});
console.log(settings);
};
complex("P1 Value"); //settings = {option1: "val1", option2: "val2"}
complex("P1 Value", {option1: "newval"}); //settings = {option1: "newval", option2: "val2"}
complex("P1 Value", {option1: "newval", option2: "newval"}); //settings = {option1: "newval", option2: "newval"}
complex("P1 Value", {option3: "Third?!"}); //settings = {option1: "newval", option2: "newval", option3: "Third?!"}
这是一个记录值的jsfiddle。 http://jsfiddle.net/8G9PJ/
答案 1 :(得分:0)
a)$ .extend基本上意味着如果传入一个覆盖默认选项的json对象,则为属性设置这些值。如果您传入{options1:“1”,options3:“3”},那么您的设置将通过您传递的值覆盖这两个参数
b)设置是库将使用的最终设置对象。所以你的库基本上可以在任何需要的地方访问settings.options1 settings.options2,如果它们是属性,则默认为defaultVal1,defaultVal2。
c)如果没有设置选项,则选项未定义,则dnt重置默认值。基本上扩展函数的工作方式是循环默认的proprty名称检查,如果选项json具有那些属性,如果是,则重置它否则不。现在,如果你传入未定义,这将失败,因此{}
答案 2 :(得分:0)
2)创建settings
对象以存储函数的所有设置。这提供了所有默认值,但可以通过将对象作为第二个参数传递给complex()
函数来覆盖。
1)在可选的options
参数对象中找到的任何键都将在默认设置中覆盖该键。这样,您可以传递仅包含要更改的设置的对象。
3)or语句确定传递给$.extend()
的第二个参数是一个对象。如果options
未定义(因为您没有将其传入),它仍然会将对象发送到$.extend()
。
答案 3 :(得分:0)
options
中使用的所有选项将替换默认设置中的相同选项setting
对象以将此功能中的所有设置设置为一个地方options||{}
表示如果选项已设置且evaualets为true,则返回options
,过度返回{}。因此在此声明之前它与if(!options) options={}
相同;