首页 > 解决方案 > 在这种情况下,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应该设置为thiso.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-less 函数。

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

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

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

谢谢!

标签: javascriptthis

解决方案


推荐阅读