0

根据我对如何在 JS 中评估表达式的有限知识,在下面的代码中,我知道括号使 JS 引擎评估括号内的任何内容,作为表达式({..}),因此({..})这将评估{...}返回到全局范围的对象(在此案例,<<我对吗?如果不是,请纠正我)或表达式的范围。

但我不明白 Greet 函数如何在({...}).greet()从表达式返回的对象的范围/上下文中进行评估({..})。通常,至少我会将表达式的返回值分配给返回的 obj 的变量/引用,然后调用该 obj 的 greet() 方法,如

var x = ({...})
x.greet()

然后,如何评估以下代码。

({
  name: "John Doe",
  data: {
    message: "Hello World"
  },
  greet: function(){
    console.log("I am " + this.name);
    console.log("I have a message for you: " + this.data.message);
  }
}).greet();

谢谢

4

1 回答 1

1

正如您所期望的那样,它只是评估对象,然后调用greet它的方法。就像这样:

console.log({ foo: 1 }.foo);

除非有方法。另请注意,括号在上述陈述中是可选的,但在您的问题中是必需的。

于 2019-09-01T10:18:29.097 回答