2017-10-07 9 views
0
私はこれらのすべてが a+b+cを返す必要が怒鳴る形式

Javascriptの機能は、異なる呼び出しファッション

add(a,b,c) 
add(a)(b)(c) 
add(a)(b,c) 
add(a,b)(c) 

をサポートする必要がありAddを言わせてJavaScriptで機能を実装したい

で起動します。出来ますか?もしそうなら、どのように?

+0

それはあなたがそれが機能を返す 'arguments'オブジェクト –

答えて

1

ような何かを行うことができます。配列の長さが3以上の場合は、Array#reduceを使用して最初の3つの数値を合計します。そうでない場合は、関数を返します。

function add() { 
 
    var args = []; // collect the arguments 
 

 
    function innerAdd() { 
 
    args.push.apply(args, arguments); // add the arguments to args 
 
    
 
    // if the length of args is under 3 return innerAdd, if not sum the first 3 numers 
 
    return args.length < 3 ? innerAdd : args.slice(0, 3).reduce(function(s, n) { 
 
     return s + n; 
 
    }); 
 
    } 
 
    
 
    return innerAdd.apply(null, arguments); // invoke innerAdd with current arguments 
 
} 
 

 
var a = 1, b = 2, c = 3; 
 

 
console.log(add(a,b,c)); 
 
console.log(add(a)(b)(c)); 
 
console.log(add(a)(b,c)); 
 
console.log(add(a,b)(c));

1

機能が実行されるたびにあなたは配列にarguments objectパラメータを収集し、それは長さですチェック

function add(){ 
 
    let sum = 0; 
 
    for(let e of arguments) sum += e; 
 
    let ret = add.bind(null, sum); 
 
    ret.toString =() => sum; 
 
    ret.valueOf =() => sum; 
 
    return ret; 
 
} 
 

 

 
let x = +add(2, 3)(4)(11) 
 
console.log(x, typeof x);

+0

を使用する必要があります、可能であり、それはこれらに限定されていないとして( – Harish

+0

は、これは良い答えで編集した答え – marvel308

+0

を見ます3 .. – Keith

関連する問題