Vytvořte rozšiřitelný kalkulátor
důležitost: 5
Vytvořte konstruktor Kalkulátor, který bude vytvářet „rozšiřitelné“ objekty kalkulátoru.
Úloha se skládá ze dvou částí.
-
Nejprve implementujte metodu
vypočítej(řetězec), která obdrží řetězec, např."1 + 2", ve formátu „ČÍSLO operátor ČÍSLO“ (oddělené mezerou) a vrátí výsledek. Měla by rozumět plusu+a minusu-.Příklad použití:
let kalkulátor = new Kalkulátor; alert( kalkulátor.vypočítej("3 + 7") ); // 10 -
Pak přidejte metodu
přidejMetodu(název, funkce), která naučí kalkulátor nové operaci. Obdrží operátornázeva funkci o dvou argumentechfunkce(a, b), která jej implementuje.Například přidáme násobení
*, dělení/a umocňování**:let silnýKalkulátor = new Kalkulátor; silnýKalkulátor.přidejMetodu("*", (a, b) => a * b); silnýKalkulátor.přidejMetodu("/", (a, b) => a / b); silnýKalkulátor.přidejMetodu("**", (a, b) => a ** b); let výsledek = silnýKalkulátor.vypočítej("2 ** 3"); alert( výsledek ); // 8
- V této úloze nejsou závorky ani složité výrazy.
- Čísla a operátor jsou oddělena právě jednou mezerou.
- Pokud chcete přidat ošetřování chyb, můžete.
- Prosíme všimněte si, jak jsou metody uloženy. Jednoduše se přidávají do vlastnosti
this.metody. - Všechny testy a číselné konverze se provádějí v metodě
vypočítej. V budoucnu může být rozšířena, aby podporovala složitější výrazy.
function Kalkulátor() {
this.metody = {
"-": (a, b) => a - b,
"+": (a, b) => a + b
};
this.vypočítej = function(řetězec) {
let split = řetězec.split(' '),
a = +split[0],
op = split[1],
b = +split[2];
if (!this.metody[op] || isNaN(a) || isNaN(b)) {
return NaN;
}
return this.metody[op](a, b);
};
this.přidejMetodu = function(jméno, funkce) {
this.metody[jméno] = funkce;
};
}