2016-03-20 4 views
0

右、アガリオを作成しています。これまでと同じブール値を持つ関数を呼び出す方法

ボタンを押すと、最後に呼び出されたものとは反対のブール値を持つ関数(setShowMass)関数が呼び出されます。

 document.addEventListener('keydown',function(e){ 
     var key = e.keyCode || e.which; 
     if(key == 71){ 
      window.agar.drawGrid = !window.agar.drawGrid; 
     } 
     if(key == 77){ 
     setShowMass(!massShown); 
     massShown = !massShown; 
     } 
    }); 
+0

、問題は何ですか? 'drawGrid'が本当にブール値であれば、今何を得ていますか? – Bikas

+0

Drawgridは変数ですが、私が使っていたsetShowMassです。申し訳ありませんが、私はあまりにも漠然としていました。 – Spectrumss

+2

ブーリアンを外部に格納し、その反対側を呼び出します。 'setShowMass(!boolVar)'のように 'boolVar'はブール変数です。外側には – Bikas

答えて

0

あなたは結果をキャッシュすることができます

var oppositebool = true; 
document.addEventListener('keydown',function(e){ 
    var key = e.keyCode || e.which; 
    if(key == 71){ 
     window.agar.drawGrid = !window.agar.drawGrid; 
    } 
    if(key == 77){ 
     setShowMass(oppositebool); 
     oppositebool = !oppositebool; 
    } 
}); 
0

また、別の関数をラップし、truefalseたび間の機能の切り替えを呼び出す関数を作成することができます。

const trueFalse = (fn, initial) => { 
    return() => { 
    fn(initial); 
    initial = !initial; 
    } 
}; 

const log = (bool) => console.log(bool); 
const switchingLog = trueFalse(log, true); 

switchingLog(); // true 
switchingLog(); // false 
switchingLog(); // true 
0

最後の値を記憶するラッパー関数を作成できます。たとえば、次のように

function callWithOppositeBoolean(func, startingValue) { 
    var bool = !startingValue; 
    return function() { 
     bool = !bool; 
     return func(bool); 
    } 
} 

その後、あなたは真と偽と交互に、元の関数を呼び出す包まれた関数を作成するためにこれを使用することができます。

var toggleShowMass = callWithOppositeBoolean(showMass, true); 

toggleShowMass(); // showMass(true) 
toggleShowMass(); // showMass(false) 
toggleShowMass(); // showMass(true) 
関連する問題