javascript - 在这种情况下,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
-less 函数。
为了完整起见,此示例成功取消绑定函数调用的实例:
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
? - 还有其他与这些相关的不直观的例子吗?
- 有没有更好或更官方的词汇可以用来描述这里发生的事情?
谢谢!
解决方案
推荐阅读
- javascript - 如何在响应的标头中写入授权
- random - 罗技游戏软件 lua 纯随机数脚本代码
- javascript - new Date() 在 app.js 和 ejs 中有不同的输出
- java - KDB 到 JKS 密钥库的转换
- javascript - 在 JavaScript 或 TypeScript 中重命名时,阻止 VS Code 在解构赋值中添加“as”或别名
- python-3.x - 在 Pandas 中获取旋转数据框的值的比率
- react-native - 如何在本机反应中在弹出堆栈上插入新场景?
- java - 为什么我的 REST 服务器中的响应状态为 204 No content?
- python - Python pandas 将质心数据合并回数据框
- python - “TypeError:无法将 'list' 对象隐式转换为 str” 谁能看到什么可以修复我的代码?