javascript - 为什么这种 JS 函数样式在检索所需数据时不起作用
问题描述
我有两个 JS 函数做同样的事情:
1)
var person = {
firstName: 'John',
surname: 'Jones',
dob: new Date('1990-01-01'),
isMarried: false,
age: function() {
return new Date().getFullYear() - this.dob.getFullYear();
}
};
2)
var person = {
firstName: 'John',
surname: 'Jones',
dob: new Date('1990-01-01'),
isMarried: false,
age: () => {
return new Date().getFullYear() - this.dob.getFullYear();
}
};
请注意,两段代码之间的唯一区别是 age() 函数的描述方式。据我了解,前者使用函数语句,后者使用函数表达式。
然而,问题是,只有前一段代码返回预期的数据,而后者返回以下错误:
Uncaught TypeError: Cannot read property 'getFullYear' of undefined
at Object.age
我试图理解为什么一个有效而另一个无效,而两者在语法上都是正确的?
我刚刚开始深入学习 JS,因此将不胜感激详细而直接的答案。谢谢你。
解决方案
如MDN所述,箭头函数不绑定到this
(除了其他关键字)。在您的第二种情况下,this
未定义,导致 TypeError。
推荐阅读
- android - 添加相同的键名值
- javascript - 在一个 Modal 上添加上一个/下一个按钮以及多个图像
- android - Google Play 控制台 - 停用的 APK 仍显示为“活动”
- cordova - cordova-sms-plugin 未请求许可
- c++ - 如何为 libavcodec 预先分配内存以写入解码的帧数据?
- java - 输出超大二维数组
- ios - 有没有办法获取运行您的应用程序的 iOS 设备的堆栈跟踪?
- php - 如何通过 curl 在 Codeigniter 中使用 Mailgun API 中的附件
- windows - 包含 winuser.h 时出错。它将 ChangeMenu 定义为 ChangeMenuW 或 ChangeMenuA
- reactjs - 实施 Google OAuth 后 CoreUI React 仪表板路由不起作用