Я пытаюсь использовать метод apply для вызова функции objectify
, передавая массив значений и используя obj
as объект. Тем не менее, не устанавливается объекту, а скорее глобальная среда (window
).JavaScript - использование применяется для вызова функции, но «this» не устанавливается для объекта, переданного как первый аргумент
Целью этого является получение массива строк, затем передача этих строк в функцию objectify
. Когда функция вызывается, она принимает значения массива, разделяет их и, если объект не имеет свойства со строковым значением, это свойство создается.
Вот код ниже:
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);
Проблема this
устанавливается как Window
, а не объекта obj
. Как мне переписать этот код так, чтобы он установил obj
как значение this
?
Конечный результат должен быть изменено obj
объектом так что она становится:
obj = {user: {name: {firstname: 'John', lastname: 'Smith'}}};
Какая причудливая близкая причина - использование '=>' вместо нормальной функции вряд ли является типографской ошибкой - это даже не синтаксическая «ошибка» (поскольку код является законным, но не работает так, как ожидалось ОП это к). – Alnitak
как этот вопрос не по теме? Были использованы соответствующие теги, дублирующий вопрос был недоступен на SO, нет опечаток, и проблема может быть воспроизведена. Кроме того, это помогает будущим читателям, потому что большинство доступных в Интернете информации, объясняющих 'Function.prototype.apply', обычно используют примитивные примеры вместо более сложных. –
Строго говоря, это скорее вопрос поведения функции стрелки, чем поведение 'Function.prototype.apply' per se – Alnitak