在这种情况下,javascript如何确定“ this”?

时间:2020-01-02 22:45:38

标签: javascript this

假设我们有一个带有函数属性的对象,并且此函数使用this

let o = {
  a: function() {
    return `a, ${this.b}`;
  },
  b: 'b'
};

我了解下面的代码将显示'a, b'

let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
console.log(o.a());

这是因为javascript认为o.a(...)的就地“拓扑”是指o在这种情况下this被设置为o.a执行。

我还理解以下内容会产生'a, undefined'

let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
let f = o.a;
console.log(f());

这是因为f(...)的“拓扑”告诉javascript没有明确的this

由于这个原因,我惊讶于以下内容产生了'a, b'

let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
console.log((o.a)());

在我看来,在(o.a)周围使用括号应迫使javascript将o.a解析为无约束的,少this的函数,然后再进行进一步的操作。

为完整起见,此示例成功解除了函数调用实例的绑定:

let o = { a: function() { return `a, ${this.b}`; }, b: 'b' };
let f = () => 'f';
console.log((o.a || f)());

即使第一个操作数上的||短路,(o.a)(o.a || f)之间仍然存在差异。

  • 我应该如何理解javascript的逻辑以确定this的值?
  • 还有其他与这些直觉相关的例子吗?
  • 有没有更好或更正式的词汇可以用来描述这里发生的事情?

谢谢!

0 个答案:

没有答案