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

时间:2011-08-19 17:01:41

标签: javascript jquery optional-parameters

我在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()时传递'可选'参数,它将如何与此对象绑定?

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

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

  4. 提前致谢。

4 个答案:

答案 0 :(得分:3)

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

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

  3. 如果选项为null,则可以防止出现错误。它表示use options,如果为null,则使用空对象文字。

  4. 让我们看一些例子:

      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)

  1. 将在options中使用的所有选项将替换默认设置中的相同选项
  2. 创建setting对象以将此功能中的所有设置设置为一个地方
  3. options||{}表示如果选项已设置且evaualets为true,则返回options,过度返回{}。因此在此声明之前它与if(!options) options={}相同;