2017-02-20 85 views
0

我想在JavaScript中爲某個功能添加一些選項。基本上,我想根據通話選項返回不同的結果。我不知道如何做到這一點,但我認爲下面的代碼可以照顧它,它不能:在JavaScript中爲功能添加選項

function optional(elem){ 
 
opt1: function(){ console.log(elem/15);}, 
 
opt2: function(){ console.log(elem/50);} 
 
} 
 

 

 
optional(100){opt1}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

能否請你讓我知道如何做到這一點?

+0

你只想把: 功能可選(ELEM){ 讓funcs中= { OPT1:函數() {console.log(elem/15);}, opt2:function(){console.log(elem/50);} } –

+0

您是否希望能夠將選項作爲參數傳遞給函數?這個問題不是很清楚。 – ADyson

回答

4

你可以有對象鍵映射到你的功能,並通過功能鍵要調用其他參數一樣

function optional(elem, trigger) { 
    var obj = { 
    opt1: function() { 
     console.log(elem/15); 
    }, 
    opt2: function() { 
     console.log(elem/50); 
    } 
    }; 

    return obj[trigger]; 
} 


optional(100, 'opt1')(); 

你可以在一個非常緊湊的方式實現這一目標的其他方式是通過與各自的PARAMS對象像

function optional(obj) { 
    //don't forget to validate the object you get 
    //ex: key exist or not, or the value is int as expected or it's a string and so on 
    console.log(obj.val/obj.divideBy); 
} 

optional({ 
    val: 100, 
    divideBy: 15 
}); 

這樣,您就不必聲明數百個函數,你可能與您正在做的事情結束了。

0

SOMO一點想法是這樣的:

function optional(elem, opt){ 
{ 
opt1: function(){ console.log(elem/15);}, 
opt2: function(){ console.log(elem/50);} 

} 
return this[optelm, ] 
} 

其中榆樹將 'OPT1', 'OPT2' ....考取作爲字符串方法可選的是這樣的:

optional(elm, 'opt1'); 
+0

感謝Alvaro,但是我怎樣才能將值傳遞給'optional()' –

0

你可以:

function optional (opt) { 
    let funcs = { 
    opt1: function(data){ console.log(data/15);}, 
    opt2: function(data){ console.log(data/50);} 
    } 

    return funcs [ opt ]; 
} 

optional ("opt2") (100) // should trace out "2" 

「可選( 」OPT2「)。返回該選擇名稱指示的功能 」(10 0)「然後將一個值(在這種情況下爲100)提供給該函數並執行它。

0

我喜歡的switch-case方法...都不能少 「FUNC-ception」

function optional(elem, opt) { 
    switch(opt) { 
     case 1: 
      console.log(elem/15); 
      break; 
     case 2: 
      console.log(elem/15); 
      break; 
     default: 
      console.log("undefined"); 
      break; 
    } 
}