gpt4 book ai didi

JavaScript - 使用 apply 调用函数,但 'this' 未设置为作为第一个参数传递的对象

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:40 24 4
gpt4 key购买 nike

我正在尝试使用 apply 方法调用 objectify 函数,传递一个值数组并使用 obj 作为对象。但是,this 并未设置为对象,而是全局环境 (window)。

这样做的目的是获取一个字符串数组,然后将这些字符串传递给函数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'}}};

最佳答案

这(没有双关语意)正在发生,因为 objectify 是一个“箭头函数”,它总是使用它从词法范围继承的 this,并且会忽略任何通过 .apply.call 传递。

如果您将其重写为普通函数,它应该可以按预期工作。

关于JavaScript - 使用 apply 调用函数,但 'this' 未设置为作为第一个参数传递的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com