2011-02-13 96 views
1

我有許多參數和許多默認值的函數。Javascript參數:有許多默認參數

function foo(p1 ,p2, p3, p4, p5, p6){ 
    var p1 = p1 || 'default1'; 
    var p2 = p2 || 'default2'; 
    var p3 = p3 || 'default3'; 
    var p4 = p4 || 'default4'; 
    var p5 = p5 || 'default5'; 
    var p6 = p6 || 'default6'; 
} 

我怎樣才能成功只能定義像P1和P6,而不是其他人呢?

我知道在Scala中,你可以做foo(p1='something1',p6='something6')

回答

5

你應該採取的對象與參數特性。

例如:

function foo(options) { 
    var p1 = options.p1 || 'default1'; 
    ... 
} 

foo({ p1: 3, p6: "abc" }); 
+0

您可以附加遍歷選項對象和另一個對象來最小化代碼大小。 – JCOC611 2011-02-13 03:25:46

+0

這也回答了我的問題:「如何防止用許多參數編寫函數?」 – 13ruce1337 2014-06-05 16:42:16

2

你可以使用一個參數是一個對象,並做jQuery的延長等的默認值:

function foo(args) { 
    jQuery.extend({ 
     p1: 'default1', 
     p2: 'default2', 
     p3: 'default3', 
     p4: 'default4', 
     p5: 'default5', 
     p6: 'default6' 
    }, args); 
} 

foo({p1: 'one', p6: 'six'}); 

在第二參數中定義的任意屬性以擴展將覆蓋屬性在第一個參數中。