nick-levelup / home

0 stars 5 forks source link

Home on 06.04.2015 #16

Open nick-levelup opened 9 years ago

nick-levelup commented 9 years ago

Создайте декоратор makeLogging(f, log), который берет функцию f и массив log.

Он должен возвращать обёртку вокруг f, которая при каждом вызове записывает («логирует») аргументы в log, а затем передает вызов в f.

В этой задаче можно считать, что у функции f ровно один аргумент.

Работать должно так:

function work(a) {
  /* ... */ // work - произвольная функция, один аргумент
}

function makeLogging(f, log) { /* ваш код */ }

var log = [];
work = makeLogging(work, log);

work(1); // 1, добавлено в log
work(5); // 5, добавлено в log

for(var i=0; i<log.length; i++) {
  alert( 'Лог:' + log[i] ); // "Лог:1", затем "Лог:5"
}
nick-levelup commented 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, другой аргумент => другое значение
nick-levelup commented 9 years ago

Напишите функцию 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
nick-levelup commented 9 years ago

Создать конструктор Car

Пример использования:

var civic = new Car( "Honda Civic", 2009, 20000 );

alert(civic); // Honda Civic has done 20000 miles
nick-levelup commented 9 years ago

Создать конструктор MacBook с двумя методами getCost и getScreenSize

var macBook = new MacBook();

macBook.getCost() // 997
macBook.getScreenSize() // 11.6

Создать три декоратора, после применения которых, экземпляр увеличивает свою стоимость Декораторы (названия и цена на которую увеличиться цена)

Пример

var macBook = new MacBook();

memory(macBook);
engraving(macBook);
insurance(macBook);

console.log(macBook.getCost()); // Outputs: 1522
console.log(macBook.getScreenSize()); // Outputs: 11.6