Open nick-levelup opened 9 years ago
Создайте декоратор makeCaching(f), который берет функцию f и возвращает обертку, которая кеширует её результаты.
В этой задаче функция f имеет только один аргумент, и он является числом.
При первом вызове обертки с определенным аргументом — она
вызывает f и запоминает значение.
При втором и последующих вызовах с тем же аргументом
возвращается запомненное значение.
Должно работать так: показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки
function f(arg) {
return Math.random()*arg; // может быть любой функцией
}
function makeCaching(f) { /* ваш код */ }
f = makeCaching(f);
var a, b;
a = f(1);
b = f(1);
alert( a == b ); // true (значение закешировано)
b = f(2);
alert( a == b ); // false, другой аргумент => другое значение
Напишите функцию outputDate(date), которая выводит дату в формате dd.mm.yy.
Ее первый аргумент должен содержать дату в одном из видов:
Как объект Date.
Как строку в формате yyyy-mm-dd.
Как число секунд с 01.01.1970.
Как массив [гггг, мм, дд], месяц начинается с нуля
Для этого вам понадобится определить тип данных аргумента и, при необходимости, преобразовать входные данные в нужный формат.
Пример работы:
function outputDate(date) { /* ваш код */ }
outputDate( '2011-10-02' ); // 02.10.11
outputDate( 1234567890 ); // 14.02.09
outputDate( [2000,0,1] ); // 01.01.00
outputDate( new Date(2000,0,1) ); // 01.01.00
Создать конструктор Car
Пример использования:
var civic = new Car( "Honda Civic", 2009, 20000 );
alert(civic); // Honda Civic has done 20000 miles
Создать конструктор MacBook
с двумя методами getCost
и getScreenSize
var macBook = new MacBook();
macBook.getCost() // 997
macBook.getScreenSize() // 11.6
Создать три декоратора, после применения которых, экземпляр увеличивает свою стоимость Декораторы (названия и цена на которую увеличиться цена)
memory
75 (память)engraving
200 (гравировка)insurance
250 (страховка)Пример
var macBook = new MacBook();
memory(macBook);
engraving(macBook);
insurance(macBook);
console.log(macBook.getCost()); // Outputs: 1522
console.log(macBook.getScreenSize()); // Outputs: 11.6
Создайте декоратор makeLogging(f, log), который берет функцию f и массив log.
Он должен возвращать обёртку вокруг f, которая при каждом вызове записывает («логирует») аргументы в log, а затем передает вызов в f.
В этой задаче можно считать, что у функции f ровно один аргумент.
Работать должно так: