Содержание
- Объекты
- Объекты как ассоциативные массивы
- Свойства
- Изменение свойств
- Неопределенные свойства
- Строки как индексы
- Сокращенная запись
- Проверка наличия свойства
- Перечисление свойств
- Наследование
- Создание объектов (Object.create)
- Получение прототипа (Object.getPrototypeOf)
- Наследование свойств
- Переопределение свойств
- Удаление свойств
- Методы
- Функции в свойствах
- Наследование функций
- Aliasing
- Неявная передача this
- Явная передача this
- Конструкторы
- Фабрики
- Конструкторы
- Прототипы в конструкторах
- Явное создание объекта и вызов конструктора
- Получение конструктора
- Объекты как ассоциативные массивы
- Замыкания
- Хранение состояния в замыкании
- Замыкание изменяемых переменных
- Трюк с объявлением промежуточной функции
- Общее состояние нескольких функций
- Модули
- Определение модуля
- Определение конструкторов
- Определение функций
- Использования модуля
- Прямое использование
- Импортирование
- Переменные класса
- Определение модуля
Домашнее задание 7. Объектные выражения на JavaScript
-
Разработайте классы
Const
,Variable
,Add
,Subtract
,Multiply
,Divide
,Negate
для представления выражений с тремя переменными:x
,y
иz
.-
Пример описания выражения
2x-3
:let expr = new Subtract( new Multiply( new Const(2), new Variable("x") ), new Const(3) ); println(expr.evaluate(5, 0, 0));
-
При вычислении такого выражения вместо каждой переменной
подставляется её значение, переданное в качестве аргумента
метода
evaluate
. Таким образом, результатом вычисления приведенного примера должно стать число 7. -
Метод
toString()
должен выдавать запись выражения в обратной польской записи. Например,expr.toString()
должен выдавать «2 x * 3 -
».
-
Пример описания выражения
-
Функция
parse
должна выдавать разобранное объектное выражение. - Сложный вариант.Метод
diff("x")
должен возвращать выражение, представляющее производную исходного выражения по переменнойx
. Например,expr.diff("x")
должен возвращать выражение, эквивалентноеnew Const(2)
. Выраженияnew Subtract(new Const(2), new Const(0))
иnew Subtract( new Add( new Multiply(new Const(0), new Variable("x")), new Multiply(new Const(2), new Const(1)) ) new Const(0) )
так же будут считаться правильным ответом. - Бонусный вариант.
Требуется написать
метод
simplify()
, производящий вычисления константных выражений. Например,parse("x x 2 - * 1 +").diff("x").simplify().toString()
должно возвращать «x x 2 - +
» или аналогичное по сложности эквивалентное выражение. -
При выполнении задания следует обратить внимание на:
- Применение инкапсуляции.
- Выделение общего кода для операций.
- Минимизацию необходимой памяти.