【问题标题】:After using the this keyword, why doesn't JavaScript realise that I've specified a property when I have? [duplicate]使用 this 关键字后,为什么 JavaScript 没有意识到我已经指定了一个属性? [复制]
【发布时间】:2021-12-31 14:07:08
【问题描述】:

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

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 属性时,它只会返回undefined。但是当我在对象中手动输入它时(即fullName: 'John Smith'),我得到了预期的结果:John Smith。

我查看了 MDN 网络文档,但只找到了几句话,说明如果激活了严格模式,this.myProperty 之类的表达式如何返回 undefined,在我的情况下就是这样。但即使它被停用,也会出现同样的问题。

谁能帮帮我?

P.S:我不是专业的编码员,所以可能只是我是个傻瓜。

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

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

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

【问题讨论】:

  • 嗨,你能分享一下你是怎么打电话给fullName的吗?此外,我鼓励您查看this explanation
  • this 不是对象 john 而在 calcBMI 函数内部它是
  • 谢谢你告诉我

标签: javascript object this


【解决方案1】:

this 的作用域是当前正在执行的函数调用。如果在对象文字的值中使用它,它将具有与在文字之外的值相同的值。它不引用当前正在定义的对象。

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

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

【讨论】:

  • 非常感谢!您的解决方案完美运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
相关资源
最近更新 更多