Die möglichen Operatoren in einem Array speichern?
var operators = ['plus', 'minus', 'div', 'mal'];
Das, und dazu noch die Operatoren in einem OBJEKT speichern und Methoden zuordnen? Ich verwende mal nur "klassische" Syntax. Alle Methoden tun das gleiche: sie bekommen a und b und liefern ein Objekt zurück, in dem das darzustellende Symbol und das erwartete Ergebnis stehen.
var randomOps = [ 'plus', 'minus', 'mal', 'div' ];
var opMap = {
'plus': function(a,b) { return { symbol: '+', erwartet: a+b; } },
'minus': function(a,b) { return { symbol: '-', erwartet: a-b; } },
'mal': function(a,b) { return { symbol: '*', erwartet: a*b; } },
'div': function(a,b) { return { symbol: '/', erwartet: a/b; } },
'random': function(a,b) {
var op = rand(0, randomOps.length);
return opMap[randomOps[op]](a,b);
}
};
var a = rand(1,9),
b = rand(1,9),
operator = document.querySelector('input[name="op"]:checked').id,
handler = opMap[operator];
if (!handler) { /* Error */ }
var opInfo = handler(a,b);
document.querySelector('#operator').textContent = opInfo.symbol;
ergebnis = opInfo.erwartet;
Auf diese Weise holt man sich direkt die Auswertefunktion aus dem Dictionary und braucht keinen Switch mehr. Random ist auch nur eine Funktion, die sich einfach der anderen Dictionary-Einträge bedient.
Zu abstrakt? Oder ok?
Rolf