为什么这等于一个空对象

时间:2019-01-13 20:06:50

标签: javascript ecmascript-6 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()

1 个答案:

答案 0 :(得分:0)

  

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

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

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

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

否,箭头功能的规则是this的含义与内部含义相同。对象文字的存在不会对此产生影响。