JS - 具有默认值的参数

时间:2016-06-28 00:40:14

标签: javascript jquery arguments

我需要创建一个函数来向其发送自定义参数。 我试图让参数具有默认值,它是未定义的。

但是我无法理解,我总是给我提供默认参数的代码。我做错了什么?

documentation

<script>
  sn_test({
    type: "image",
    file: "test.jpg",
    breakingPoint: 100

  });
</script>

JS

function sn_test(args) {
  var options = {
    Type: args.type,
    File: args.file
  };

  var default_options = {
    breakingPoint: 2000
  };

  args = $.extend({}, default_options, args);

  $("#result1").html(options.Type);
  $("#result2").html(options.File);
  $("#result3").html(default_options.breakingPoint);
}

4 个答案:

答案 0 :(得分:3)

您要将#result3的内容设为default_options.breakingPoint而不是args.breakingPoint

这应解决问题:

$("#result3").html(args.breakingPoint);

答案 1 :(得分:1)

修复使用:

var default_options = {
    breakingPoint: args.breakingPoint || 2000
  };

FIDDLE

答案 2 :(得分:1)

您的代码中存在一些错误:

  • 您的选择&#39;对象在键中使用不同的大小写:使用Type,而type正在传递。
  • 您正在使用default_options扩展args,而不是options,而您已初步化,这使得它变得毫无用处。
  • 您使用default_options.breakPoint代替options.breakPoint #result3

对于您的变量以及分配给他们的内容,似乎有点混乱。

你想要的是:

  • args - 这些是传递给方法的参数(传递的选项)
  • default_options - 包含默认选项的对象。
  • options - 包含合并选项的对象。

这些都需要匹配案例。

Here's a fixed example

编辑:如果可能的话,还要考虑将default_options声明移到功能范围之外,这意味着它不会在每次调用函数时创建,从而提高性能。 Here

答案 3 :(得分:0)

您始终使用default_options.breakingPoint而不是重写的值。试试这个:

var sn_test = (function () {
  var default_options = {
    breakingPoint: 2000
  };

  return function (args) {
    args = $.extend({}, default_options, args);
    $("#result1").html(args.type);
    $("#result2").html(args.file);
    $("#result3").html(args.breakingPoint);
  };
})();

小提琴:https://jsfiddle.net/uxdmby0y/4/