如何更新在 javascript 中使用模板文字的对象值?

How can I update an object value which uses a template literal in javascript?

如您所见,对象 obj2 正在使用 obj1 中定义的模板文字。 如何在调用 func() 时更新 obj2 中 title 的对象值?

在文件 1 中

let obj1 = { name: 'abc' }, 
obj2 = { title : `${obj1.name}` } 

在文件 2 中

import {obj1, obj2} from 'file1';

func();

func() {
let obj1 = _.clone(obj1), obj2 = _.clone(obj2);
obj1.name = 'Title of this Page';
console.log(obj2.title) // Still shows abc
}

你不能,当 object 初始值设定项被评估时,模板文字被评估并变成了一个字符串。 obj.title 是正在评估的模板文字(字符串¹)的 结果,而不是某种模板 object。模板字面量正是这样的:一个 字面量表示法 在遇到它时进行求值(就像 字符串字面量 被求值,结果是一个字符串,当遇到字符串文字)。

相反,您可以将 title 传递给 name 的函数:

let obj1 = { name: 'abc' }, 
obj2 = { title : name => `${name}` } 

你要调用它,当然,当你想要标题的时候。


¹ 一个字符串 在这种情况下,因为模板文字是独立的,没有附加到标记函数。