【问题标题】:Why is this equal to an empty object [duplicate]为什么这等于一个空对象[重复]
【发布时间】:2019-01-13 20:06:49
【问题描述】:

为什么在这两个示例中都打印出一个空对象?在第一个例子中,这应该等于全局环境吗?另外,在第二个示例中,我使用箭头函数将 this 绑定到 obj2 对象,所以我希望 x() 返回 obj2 对象,但得到了一个空对象?有人可以解释一下这里发生了什么。

let obj1 = {
  name: "object1",
  method: function(a) {
    console.log(a)
  }
}
obj1.method(this)

// ---------------------
let obj2 = {
  name: "object2",
  method: () => {
    console.log(this)
  }
}
let x = obj2.method;
x()

【问题讨论】:

  • “另外,在第二个示例中,我使用箭头函数将 this 绑定到 obj2 对象”——不,你没有。您已将其绑定到您将对象字面量放入的函数中的 this 值。
  • “为什么在这两个例子中都打印了一个空对象?” — 他们没有。
  • 这是因为 obj.method 是一个函数,而不是一个对象。也许你想做let x = obj2.method();
  • @DimitriL。 — 那将是 undefinedx() 会引发错误。

标签: javascript ecmascript-6 this


【解决方案1】:

在第一个例子中,这应该等于全局环境吗?

取决于你在哪里运行它。我将假设它是一个 Node 模块,在这种情况下,答案是“否”。 this 设置为模块的导出:

console.log(this === global);  // false
console.log(this === module.exports);  // true

在第二个示例中,我使用箭头函数将 this 绑定到 obj2 对象,所以我希望 x() 返回 obj2 对象,但得到了一个空对象

不,箭头函数的规则是this 在它们内部和外部的含义相同。对象字面量的存在不会影响这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2013-07-04
    • 1970-01-01
    • 2013-12-27
    • 2016-10-02
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多