【问题标题】:Template literals in methods on objects Javascript对象Javascript方法中的模板文字
【发布时间】:2022-01-10 03:59:58
【问题描述】:

我在尝试 console.log 模板文字时遇到问题。正如您在下面看到的,我有一个简单的 samsung 对象,它有一个方法可以打开并将模板文字打印到控制台。

let samsung = {
  model: "S21",
  camera: "48px",
  processor: "Snapdragon888",
  turnOn: function(model, camera, processor) {
    console.log(
      `I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor`
    );
  },
};
console.log(samsung.turnOn());

我尝试了很多不同的方法,使用箭头函数,使用“this”运算符,添加/删除函数的参数,放入“Samsung”而不是“this”等。但它会打印出以下内容不管怎样:I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor

【问题讨论】:

  • "无论如何它都会打印出以下内容:我已经打开!我是 ${model},我有一个 ${camera} 相机和一个 ${processor} 处理器" 我不相信这个结果是可能的。必须处理模板并将占位符替换为值。如果你不提供你会得到undefined的值,但你不会只打印占位符。

标签: javascript object methods template-literals


【解决方案1】:

您没有向函数传递任何参数,因此默认为undefined

如果要获取对象的属性值,使用this引用该对象:

let samsung = {
  model: "S21",
  camera: "48px",
  processor: "Snapdragon888",
  turnOn: function() {
    console.log(
      `I have turned on! I am the ${this.model}, I have a ${this.camera} camera and a ${this.processor} processor`
    );
  },
};
console.log(samsung.turnOn());

【讨论】:

  • 谢谢!在更改了这么多东西后,我忘记了不输入参数。我也再次尝试了“这个”,现在它工作正常,所以我第一次肯定做错了什么。非常感谢 Spectric!
【解决方案2】:

只是为了让你了解情况:

this 可用于引用执行范围的当前对象,对于您的示例,它是您定义的对象。

使用该关键字可以访问任何可用的方法 (this.turnOn()) 或属性 (this.camera)。

使用箭头函数时的一个注意事项是this 会丢失它的值,因此在使用哪种语法定义方法时要小心。

在您的情况下,如果您在对象外部定义函数并使用 . 运算符分别传递每个参数,它可能会起作用。

const turnOn = (model, camera, processor) => {
    console.log(
      `I have turned on! I am the ${model}, I have a ${camera} camera and a ${processor} processor`
    );
};
turnOn(object.model, object.camera, object.processor);

或者使用this和对象内部定义的方法来引用每个属性。

【讨论】:

  • 嗨安东尼奥,非常感谢您的解释!现在更有意义了。我已经尝试过两种方式,有“这个”和没有“这个”,它工作正常。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2019-12-13
  • 2016-07-14
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多