Как сделать функцию, которая делает функции? - PullRequest
0 голосов
/ 12 марта 2020

Хорошо, сейчас 3 часа ночи, и эта глупая проблема не дает мне покоя, беспокоит меня всю ночь, в основном я пытался сделать функцию, которая принимает существующую функцию в качестве параметра для возврата функции конструктора, может быть, это будет очевидно, читая мой код

var f = function() {
  return function(p) {
    return document.createElement(p)
  }
};
var x = f();
alert(x); //alerts function(p){ return document.createElement(p)}
var n = x("div"); //it creates div Element
alert(n); // alert [object HTMLDivElement]

приведенный выше код работает просто отлично, но я хочу использовать переменные вместо того, чтобы помещать createElement непосредственно в функцию конструктора, я хочу передать его в качестве параметра функции f как это

var f = function(dd) {
  return function(p) {
    return dd(p)
  }
};
var x = f(document.createElement);
alert(x); //alerts function(p){ return dd(p)}
var n = x("div"); //doesn't createElement
alert(n); //doesn't alert

Кроме того, последний код выводит что-то странное в нелегальном вызове консоли, я понятия не имею, что не так с кодом wmy, пожалуйста, помогите?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Необходимо связать метод createElement с документом

var x = f(document.createElement.bind(document));

0 голосов
/ 12 марта 2020

Вы должны привязать метод createElement к объекту document. В противном случае вы вызываете метод, но у него нет правильного контекста.

var f = function(dd) {
  return function(p) {
    return dd(p)
  }
};
var x = f(document.createElement.bind(document));
alert(x);
var n = x("div");
alert(n);

Версия функции стрелки будет

var f = dd => p => dd(p);
var x = f(document.createElement.bind(document));
alert(x);
var n = x("div");
alert(n);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...