使用 this 关键字后,为什么 JavaScript 没有意识到我已经指定了一个 属性?

After using the this keyword, why doesn't JavaScript realise that I've specified a property when I have?

我有一个看起来像这样的对象:

let john = {
    firstName: 'John',
    lastName: 'Smith',

    fullname: `${this.firstName} ${this.lastName}`,

    height: 1.95,
    mass: 92,

    calcBMI: function () {
        this.BMI = this.mass / this.height ** 2;
        return this.BMI
    }
}

每当我查看 fullName 属性 时,它只是 return 和 undefined。但是当我在对象中手动输入它时(即 fullName: 'John Smith'),我得到了预期的结果:John Smith.

我查看了 MDN 网络文档,但只找到了几句话,说明如果激活严格模式,this.myProperty 等表达式如何可以 return 未定义,我的情况就是如此。但是即使停用了,还是出现了同样的问题

谁能帮帮我?

P.S:我不是专业的coder,所以可能是我傻了。

编辑:我如何调用 fullName 以及对我的对象的另一个疑问

如果您想知道,我正在将 fullName 属性 记录到控制台。

还有一件事 - 您可能已经注意到对象中的 calcBMI 函数并且它还使用了 this 关键字。我想知道为什么它在里面工作而不在外面工作。

this 的范围是当前正在执行的函数调用。如果它用在对象字面量的值中,它的值将与字面量之外的值相同。它不引用正在定义的当前对象。

要在 fullname 中使用 this,您可以将其改为函数:

fullname: function() {
    return `${this.firstName} ${this.lastName}`;
}