创建一个处理可选参数的函数

我在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.. }; 

我不明白这个模式的三个方面:

  1. $.extend()函数将options参数与第一个参数对象合并。 如果我在调用complex()时传递’optional’参数,它将如何与此对象绑定?

  2. 为什么要创建settings对象? 这有什么用途?

  3. OR语句的目的是什么?

提前致谢。

  1. 指定选项的目的是为您提供默认值。 如果您指定其中一个,那么您提供的值将覆盖默认值。

  2. settings是将在整个函数中使用的对象。 它可以很容易地被称为选项,并将覆盖传递给函数的选项的值。

  3. 如果选项为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()

  1. 将在options使用的所有选项将替换默认设置中的相同选项
  2. setting对象创建以将此function中的所有设置设置为一个位置
  3. options||{}表示如果选项setted和evaualets为true然后返回options ,则返回{} overwise。 因此,在此语句之前,它与if(!options) options={} ;