2016-06-28 62 views
1

我需要創建一個函數,在其中向其發送自定義參數。 我想擁有一個默認值的參數是未定義的。JS - 帶默認值的參數

但我不能得到正確的代碼,我總是給我默認的參數。我究竟做錯了什麼?

JSFIDDLE

<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); 
} 
+0

https://jsfiddle.net/vp_arth/uxdmby0y/2/ –

回答

1

有代碼中的幾個誤區:

  • 你「選項'對象正在使用di在關鍵的不同情況下:使用Type,而type正在通過。
  • 您正在擴展default_optionsargs而不是options它已初始化,使其無用。
  • 您正在使用default_options.breakPoint而不是options.breakPoint#result3

看來你的變量和分配給他們的東西只有一點混淆。

你想要的是:

  • args - 這些都是通過傳遞給方法的參數(被傳遞通過選項)
  • default_options - 包含默認選項的對象。
  • options - 包含合併選項的對象。

這些都需要匹配大小寫。

Here's a fixed example

編輯:也考慮移動功能範圍如果可能的話之外你default_options聲明,這將意味着它沒有被上每次調用函數創建,提高了性能。 Here

3

您的#result3含量設定爲default_options.breakingPoint,而不是args.breakingPoint

這應該可以解決這個問題:

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

上的使用:

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

FIDDLE

+0

與參數對象耦合default_options.breakingPoint的價值擊敗default_options的目的,不是不? – Dylon

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/