JavaScript - 对象方法中的这个关键字

JavaScript - this keyword inside an object method

提问人:jpowell79 提问时间:10/2/2022 更新时间:10/2/2022 访问量:60

问:

我希望看到根据以下代码片段返回到控制台的值 26,但我得到“未定义”。我是否错误地使用了“this”关键字?

const myDetails = {
  name: "peter",
  birthYear: 1996,
  calcAge: function () {
    this.age = 2022 - this.birthYear;
    return this.age;
  },
  gender: "male"
}

console.log(myDetails.age);
JavaScript 对象 方法 this

评论

1赞 Andreas 10/2/2022
函数中只有一个存储在对象属性中的函数。 或或会起作用 - 但不是agecalcAgemyDetailsmyDetails.namemyDetails.birthYearmyDetails.calcAge()myDetails.age
0赞 jpowell79 10/2/2022
但是通过返回 this.age,这是否意味着它可以在方法之外引用?
2赞 Andreas 10/2/2022
你没有打电话,所以什么都没有回来。还将返回与函数返回的属性/变量同名的魔术变量的内容,而不是某些魔术变量。.calcAge()return this.agethis.age
0赞 Error 2.0 10/2/2022
您永远不会声明可以调用的年龄值 (myDetails.calcAge())
0赞 jpowell79 10/2/2022
目标是将年龄键的值打印到控制台。此解决方案调用 object 方法,但不会将 age 的值打印到控制台

答:

0赞 Sachithra Prasad 10/2/2022 #1

我稍微更改了您的代码。现在应该可以工作了。调用函数时,必须使用函数名称。

const myDetails = {
    name: "peter",
    birthYear: 1996,
    calcAge: function() {
        this.age = 2022 - this.birthYear;
        return this.age;
    },
    gender: "male"
}
console.log(myDetails.calcAge());//Here 
1赞 jpowell79 10/2/2022 #2

好吧,我想我现在已经想通了......

object 方法尚未被调用!因为函数表达式是按顺序处理的(这个对象方法是......一个函数表达式!而函数 DECLARATIONS 可以添加到文件中的任何位置,但会自动“提升”到顶部。

因此,在这种情况下,需要先调用该函数。

所以这对我有用,并创建了一个新的密钥对年龄:26

const myDetails = {
  name: "peter",
  birthYear: 1996,
  calcAge: function () {
    this.age = 2022 - this.birthYear;
    return this.age;
  },
  gender: "male"
}
// invoke the object method
myDetails.calcAge();
console.log(myDetails.age);

评论

0赞 Bergi 10/2/2022
函数是使用声明还是表达式创建的并不重要,它们都不会自动调用它。
0赞 jpowell79 10/2/2022
我的理解是,您不能将声明用作对象方法
0赞 Bergi 10/2/2022
是的,不在对象字面量中,但您可以之前声明它,然后将其用作属性,使其成为一种方法,就像使用函数表达式一样。但无论哪种方式:都不会调用该函数。