【问题标题】:optional arguments in the constructor of an object (or method) javascript对象(或方法)javascript的构造函数中的可选参数
【发布时间】:2014-10-24 10:42:40
【问题描述】:

我正在研究一个名为 jQuery TE 的 jQuery 插件。在构造函数方法中有一个参数'options'被传递:

$.fn.jqte = function(options)

通常在调用这个方法时,我们必须像这样传递'options'参数:

$(".editor").jqte({
    "css":"example",
    "source":false,
    "titletext":false
});

我不明白我们没有义务像这样将这个参数“选项”传递给它:

$(".editor").jqte();

确实不会导致任何错误。我在源代码控制中的任何地方都看不到存在参数“选项”的东西。

谁能给我解释一下,我到处都找不到关于这个问题的资源。也许我误读了源代码?

这里是文档的链接: http://jqueryte.com/documentation

谢谢!

【问题讨论】:

  • 我没有检查源代码,但是如果传递的对象是空的或根本没有传递,它很容易不做任何事情。你在构造函数中所要做的就是if(!options) return;,如果没有传递任何选项,函数就会停在那里......

标签: javascript jquery parameter-passing


【解决方案1】:

查看这个插件的源码可以发现,选项传递给jquery.extend(),这会将两个或多个对象的内容合并到第一个对象中Source )。

你可以这样看:

var default = {left: 0, bottom: 3};
var options = {left: 1, top: 1}

var result = $.extend(default, options); // {left: 1, top: 1, bottom: 3};

反过来,jQuery 扩展允许将第二个参数传递为 false。如果它是假的,(或不存在,或未定义,或......)那么它将只返回第一个参数('defaults')。这意味着您可以传递的所有选项无论如何都在默认数组中,这意味着如果您不传递选项,它根本不会更改默认值。

【讨论】:

  • 谢谢,如果我理解正确的话,在这种情况下是因为方法extend()没有返回错误。如果此方法不在代码中,则会出现错误。因此,我们应该添加类似:if(!options) return; 的内容。正如您所说,这是因为 extend () false 的第二个参数接受没有错误,并且您在调用 jqte () 时不必传递参数。所以不需要添加类似if(!options) return;
  • @Le Fredd 实际上,它比这更简单。如果您不将值传递给需要 1 的函数,则该值为 undefined。要查看该值是否通过,您需要做的就是检查您的值是否为“假”,因为undefined 等于假。所以... fn(options){ if(!options) return; else alert("Thanks for the options!");} 不会出错,如果你不传递它的选项。 jQuery.extend() 只是确保这样做不会出错,因为将默认值与可能传递的选项合并非常有用 :) 但是,是的,你似乎明白了它的要点!
  • 非常感谢,我想我明白了:)
  • @Le Fredd 如果这是您的答案,您能否将其标记为答案:)?干杯
猜你喜欢
  • 2010-10-26
  • 2021-02-28
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 2012-04-17
相关资源
最近更新 更多