Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изучите встроенную функцию bind (https://javascript.ru/forum/misc/76447-izuchite-vstroennuyu-funkciyu-bind.html)

Marson 12.01.2019 10:46

Изучите встроенную функцию bind
 
Изучите встроенную функцию bind, и сделайте свою версию, которая позволит определить "значение по умолчанию" не только для первых параметров, но для любых других, например для степени в Math.pow:

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 zeroPrompt = myBind(prompt, window, [undefined, "0"]) // аналогично, только теперь задается "0" как текст по умолчанию в prompt, 
                                                          // а текст приглашения пользователя задается при вызове zeroPrompt
var someNumber = zeroPrompt("Введите число")              // вызывает prompt("Введите число","0")

Массив, который идет третьим параметром определяет, какие поля должны подменяться значением по умолчанию, а какие - задаваться в последствии (undefined).

Marson 12.01.2019 10:50

Подскажите как значения массива вставить в функцию Math.pow() например и для чего в параметре Math, т.е this?

j0hnik 12.01.2019 20:11

Цитата:

Сообщение от Marson (Сообщение 501828)
Подскажите как значения массива вставить в функцию Math.pow()

console.log([[1,2],[2,3],[4,5]].map(el=> Math.pow(el[0], el[1])));

рони 12.01.2019 20:26

:write:
function myBind(func, context , bindArgs) {
  function wrapper() {
    var args = Object.assign(bindArgs,arguments);
    return func.apply(context, args);
  }
  return wrapper;
}
var pow5 = myBind(Math.pow, Math, [undefined, 5])
var cube = myBind(Math.pow, Math, [undefined, 3]);
alert(pow5(2));//32
alert(cube(3));//27
var zeroPrompt = myBind(prompt, window, [undefined, "0"])
var someNumber = zeroPrompt("Введите число")
alert(someNumber);

Marson 13.01.2019 16:39

Спасибо!


Часовой пояс GMT +3, время: 20:05.