Лайк тебе за старания =) Твой код выдает тебя. Он просто кричит, что у тебя мало практики) План таков: 1. Сейчас дожимаешь свой "объектный" калькулятор 2. После чего я покажу, как достаточно просто его визуализировать без лишних плясок с бубном --- Далее все по п.1: 1.1 Чем очевидней твой код, тем его проще читать. Вместо (''+val).matchрекомендую String(val).matchНе надо самому себе создавать доп. трудности1.2 static isOperation(val) { return (''+val).match(/^[\+\-\*\/]$/) !== null; }вместо см. match мой пример выше с REGEXP.test()1.3 вместо (+val)лучше писать Number(val)1.4 вместо let fn = new Function('return '+str+';'),см. мой пример выше со string templates1.5 рекурсия на ровном месте непонятно зачем add(val) { if(Array.isArray(val)) { val.forEach((value) => this.add(value));сам себе сложности создаешьесли хочешь валидировать массив actions, лучше отдельную функцию создать я последовательность не валидировал. на мой взгляд это лишнее) 1.6 // Предотвращает ошибку в случае если последний элемент это знак, удаляя еговсе равно try catсh нужен. Понятно почему? чтобы сделать свойство приватным. Когда ты описываешь класс, подразумевается, что он инкапсулирован в модуль что еще за "функция в ней"? =)Далее по п.2 Набросал на скорую руку очень упрощенно и приближенно https://jsfiddle.net/gLgo2s2d/2/