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?
2 odpowiedzi
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);
Musisz powiązać metodę createElement z dokumentem
var x = f(document.createElement.bind(document));