Ok, więc jest 3 nad ranem i ten głupi problem trzyma mnie na nogach, przeszkadza mi całą noc, w zasadzie to, co próbowałem zrobić, to stworzyć funkcję, która przyjmuje istniejącą funkcję jako parametr zwracający funkcję konstruktora, może to będzie czytaj mój kod oczywiste

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]

Powyższy kod działa dobrze, ale chcę używać zmiennych zamiast umieszczać createElement bezpośrednio w funkcji konstruktora, chcę przekazać go jako parametr do funkcji f w ten sposób

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

Poza tym ostatni kod wypisuje coś dziwnego w nielegalnym wywołaniu konsoli, nie mam pojęcia, jaki jest zły kod wmy, proszę o pomoc?

0
Yusuf M Rgoul 12 marzec 2020, 06:00

2 odpowiedzi

Najlepsza odpowiedź

Musisz powiązać metodę createElement z obiektem document. W przeciwnym razie wywołujesz metodę, ale nie ma ona odpowiedniego kontekstu.

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);

Wersja funkcji strzałki byłaby

var f = dd => p => dd(p);
var x = f(document.createElement.bind(document));
alert(x);
var n = x("div");
alert(n);
0
Barmar 13 marzec 2020, 16:46

Musisz powiązać metodę createElement z dokumentem

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

0
Lakshan Mamalgaha 12 marzec 2020, 05:21