创建一个处理可选参数的函数
我在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()
时传递’optional’参数,它将如何与此对象绑定? -
为什么要创建
settings
对象? 这有什么用途? -
OR语句的目的是什么?
提前致谢。
-
指定选项的目的是为您提供默认值。 如果您指定其中一个,那么您提供的值将覆盖默认值。
-
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/
a)$ .extend基本上意味着如果传入一个覆盖默认选项的json对象,则为属性设置这些值。 如果您传入{options1:“1”,options3:“3”},那么您的设置将使您传递的值覆盖这两个参数
b)设置是库将使用的最终设置对象。 所以你的库基本上可以在任何需要的地方访问settings.options1 settings.options2,如果它们是属性,则默认为defaultVal1,defaultVal2。
c)如果没有设置选项,即选项未定义,则dnt重置默认值。 基本上扩展函数的工作方式是循环默认的proprty名称检查,如果选项json具有那些属性,如果是,则重置它否则不。 现在,如果你传入未定义,这将失败,因此{}
2)创建settings
对象以存储function的所有设置。 这提供了所有默认值,但可以通过将对象作为第二个参数传递给complex()
函数来覆盖。
1)在可选options
参数对象中找到的任何键都将在默认设置中覆盖该键。 这样,您可以传递仅包含要更改的设置的对象。
3)or语句确定传递给$.extend()
的第二个参数是一个对象。 如果未定义options
(因为您没有将其传入),它仍然会将对象发送到$.extend()
。
- 将在
options
使用的所有选项将替换默认设置中的相同选项 -
setting
对象创建以将此function中的所有设置设置为一个位置 -
options||{}
表示如果选项setted和evaualets为true然后返回options
,则返回{} overwise。 因此,在此语句之前,它与if(!options) options={}
;