首页 > 解决方案 > 为什么这种 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,因此将不胜感激详细而直接的答案。谢谢你。

标签: javascript

解决方案


MDN所述,箭头函数不绑定到this(除了其他关键字)。在您的第二种情况下,this未定义,导致 TypeError。


推荐阅读