Ich versuche die Methode apply zu verwenden, um die objectify
-Funktion aufzurufen, ein Array von Werten zu übergeben und obj
zu verwenden das Objekt. this
wird jedoch nicht auf das Objekt gesetzt, sondern auf die globale Umgebung (window
).JavaScript - mit "apply" zum Aufrufen der Funktion, aber "this" wird nicht auf das als erstes Argument übergebene Objekt gesetzt
Der Zweck davon ist, ein Array von Zeichenfolgen zu erhalten, und dann diese Zeichenfolgen an die Funktion objectify
übergeben. Wenn die Funktion aufgerufen wird, nimmt sie die Array-Werte, teilt sie auf, und wenn das Objekt keine Eigenschaft mit dem String-Wert hat, wird diese Eigenschaft erstellt. Hier
ist der Code unter:
let obj = {};
let arr = ["user.name.firstname=John", "user.name.lastname=Smith"];
const objectify = x => {
let cur = this, v;
return x.split('.').forEach(e => /=/g.test(e) ?
(v = e.split('='), cur[v[0]] = v[1]) : cur[e] ?
cur = cur[e] : (cur[e] = {}, cur = cur[e]))};
objectify.apply(obj,arr);
Das Problem wird this
wird als Window
eher als das Objekt obj
. Wie sollte ich diesen Code so umschreiben, dass er obj
als this
Wert setzt?
Das Ergebnis Ende sollte ein modifiziertes obj
Objekt sein, so wird es:
obj = {user: {name: {firstname: 'John', lastname: 'Smith'}}};
was ein bizarrer naher Grund - mit '=>' anstelle einer normalen Funktion ist kaum ein Tippfehler - es ist nicht einmal ein Syntax- "Fehler" (da der Code legal ist, aber nicht so funktioniert, wie das OP erwartet es zu). – Alnitak
Wie ist diese Frage off-topic? Die entsprechenden Tags wurden verwendet, eine doppelte Frage zu SO war nicht verfügbar, es gab keine Tippfehler und das Problem konnte reproduziert werden. Es hilft auch zukünftigen Lesern, da die meisten online zur Verfügung stehenden Informationen, die 'Function.prototype.apply' erklären, im Allgemeinen rudimentäre Beispiele anstelle von komplexeren verwenden. –
Genau genommen ist das mehr eine Frage des Pfeilfunktionsverhaltens als das Verhalten von 'Function.prototype.apply' an sich – Alnitak