Person
со следующими параметрами:
name
, surname
, fatherName
, age
, sex
, salary
, married
, сохраняемыми в полях объекта.Person
с теми же параметрами, что и в предыдущей задаче. Поля должны хранится в замыкании. Для задания и чтения
параметров напишите набор геттеров и сеттеров: getName
, setName
, getSurname
, setSurname
, getFatherName
, setFatherName
, getAge
,
setAge
, getSex
, setSex
, getSalary
, setSalary
, getMarried
, setMarried
. Каждый из сеттер должен валидировать
(проверять) данные. Если данные некорректны, данные внутри замыкания не изменяются.
Сеттер всегда возвращает текущее значение переменной. См. примерmakeCounter
, которая определяет переменную counter
и возвращает другую функцию, увеличивающую counter
каждый вызов и возвращающую её значение: var counter = makeCounter()
var otherCntr = makeCounter()
counter1() // 1
counter1() // 2
otherCntr() // 1
otherCntr() // 2
otherCntr() // 3
counter1() // 3
console.log
. Используйте Self Invoked Function для создания замыкания и
setTimeout
для задержки вывода. Результатом должно быть: 5 //пауза 1 секунда
4 //пауза 1 секунда
3 //пауза 1 секунда
2 //пауза 1 секунда
1 //пауза 1 секунда
поехали!
makeProfileTimer
, которая служит для замера времени выполнения другого кода и работает следующим образом: var timer = makeProfileTimer()
doSomething(); //некий код, время выполнения которого мы хотим измерить с высокой точностью
alert(timer()); //alert должен вывести время в микросекундах от выполнения makeProfileTimer до момента вызова timer(),
// т. е. измерить время выполнения doSomething
Используйте performance.now()
getSaver
, которая: var saver = getSaver(Math.random) //создает функцию-хранилище результата переданной в качестве параметра функции (Math.random
// в примере). На этом этапе Math.random НЕ вызывается
var value1 = saver() //saver вызывает переданную в getSaver функцию, запоминает результат и возвращает его
var value2 = saver() //saver в дальнейшем просто хранит результат функции, и более НЕ вызывает переданную
//в getSaver функцию;
value1 === value2 // всегда true
Таким образом getSaver
решает две задачи:
Math.random
.Math.random
только тогда, когда результат действительно нужен. Если же по каким-то причинам значение не понадобится, то Math.random
даже не будет вызыванbind
, и сделайте свою версию, которая позволит определить "значение по умолчанию" не только для первых параметров, но для любых других, например для степени в Math.pow:var pow5 = myBind(Math.pow, Math, [undefined, 5]) // первый параметр - функция для биндинга значений по умолчанию, второй - this для этой функции, третий - массив, в котором undefined означает
//параметры, которые должны передаваться при вызове, а другие значения являются значениями по умолчанию:
pow5(2) // вызывает Math.pow(2,5), соотнесите с [undefined, 5]
var zeroPrompt = myBind(prompt, window, [undefined, "0"]) //аналогично, только теперь задается "0" как текст по умолчанию в prompt, а текст приглашения пользователя задается при вызове zeroPrompt
var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
Массив, который идет третьим параметром определяет, какие поля должны подменяться значением по умолчанию, а какие - задаваться в последствии (undefined).