【发布时间】:2016-11-13 03:45:28
【问题描述】:
我正在尝试使用 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'}}};
【问题讨论】:
-
多么奇怪的关闭原因 - 使用
=>而不是普通函数几乎不是印刷错误 - 它甚至不是语法“错误”(因为代码是合法的,但不起作用OP 期望的方式)。 -
这个问题怎么跑题了?使用了适当的标签,SO 上没有重复的问题,没有印刷错误,问题可以重现。此外,它有助于未来的读者,因为大多数在线解释
Function.prototype.apply的信息通常使用基本示例而不是更复杂的示例。 -
严格来说这更像是箭头函数行为的问题,而不是
Function.prototype.apply本身的行为问题
标签: javascript apply