|
@@ -46,8 +46,6 @@ var value4 = saver2()
|
|
|
|
|
|
value3 === value4 // тоже должно быть true
|
|
|
|
|
|
-
|
|
|
-
|
|
|
let namePrompt = prompt.bind(window, 'Как тебя зовут?')
|
|
|
let nameSaver = makeSaver(namePrompt)
|
|
|
alert(`Привет! Prompt еще не было!`)
|
|
@@ -55,6 +53,41 @@ alert(`Привет ${nameSaver()}. Только что запустился pro
|
|
|
alert(`Слушай, ${nameSaver()}, го пить пиво. Ведь prompt был только один раз`)
|
|
|
|
|
|
|
|
|
+// myBind
|
|
|
+let myBind = function (fn, Math, arr) {
|
|
|
+ return function () {
|
|
|
+ index = 0;
|
|
|
+ let newArr = [...arguments];
|
|
|
+ return fn.apply(Math, arr.map(i => {
|
|
|
+ if (i === undefined) {
|
|
|
+ let number = newArr[index]
|
|
|
+ index++
|
|
|
+ return number
|
|
|
+ }
|
|
|
+ else return i
|
|
|
+ }));
|
|
|
+ };
|
|
|
+};
|
|
|
+
|
|
|
+var pow5 = myBind(Math.pow, Math, [undefined, 5])
|
|
|
+// первый параметр - функция для биндинга значений по умолчанию,
|
|
|
+// второй - this для этой функции, третий - массив, в котором undefined означает
|
|
|
+// параметры, которые должны передаваться при вызове,
|
|
|
+// а другие значения являются значениями по умолчанию:
|
|
|
+var cube = myBind(Math.pow, Math, [undefined, 3]) // cube возводит число в куб
|
|
|
+
|
|
|
+pow5(2) // => 32, вызывает Math.pow(2,5), соотнесите с [undefined, 5]
|
|
|
+cube(3) // => 27
|
|
|
+
|
|
|
+var chessMin = myBind(Math.min, Math, [undefined, 4, undefined, 5, undefined, 8, undefined, 9])
|
|
|
+chessMin(-1, -5, 3, 15) // вызывает Math.min(-1, 4, -5, 5, 3, 8, 15, 9), результат -5
|
|
|
+
|
|
|
+var zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt,
|
|
|
+// а текст приглашения пользователя задается при вызове zeroPrompt
|
|
|
+var someNumber = zeroPrompt("Введите число") // вызывает prompt("Введите число","0")
|
|
|
+
|
|
|
+myBind((...params) => params.join(''), null, [undefined, 'b', undefined, undefined, 'e', 'f'])('a', 'c', 'd') === 'abcdef'
|
|
|
+
|
|
|
|
|
|
|
|
|
|