提问人:jpowell79 提问时间:10/2/2022 更新时间:10/2/2022 访问量:60
JavaScript - 对象方法中的这个关键字
JavaScript - this keyword inside an object method
问:
我希望看到根据以下代码片段返回到控制台的值 26,但我得到“未定义”。我是否错误地使用了“this”关键字?
const myDetails = {
name: "peter",
birthYear: 1996,
calcAge: function () {
this.age = 2022 - this.birthYear;
return this.age;
},
gender: "male"
}
console.log(myDetails.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
是的,不在对象字面量中,但您可以之前声明它,然后将其用作属性,使其成为一种方法,就像使用函数表达式一样。但无论哪种方式:都不会调用该函数。
评论
age
calcAge
myDetails
myDetails.name
myDetails.birthYear
myDetails.calcAge()
myDetails.age
.calcAge()
return this.age
this.age