我正在寻找一种方法来使用函数中变量的模板字符串。
这是一个工作示例(不是变量)
let s = `Hello ${this.name}!`;
let f = function () {
return s;
}
f.bind({
name: 'Stackoverflow-User'
})(); // Hello undefined!
这是不可行的示例(在变量中)
{{1}}
答案 0 :(得分:2)
这:
let f = function () {
return `Hello ${this.name}!`
}
编译成这个:
let f = function () {
return "Hello " + this.name.toString() + "!";
}
一旦f
被称为适当对象的方法,它就会起作用。
每次调用函数时都会计算表达式。
在你的第二个案例中:
var s = "Hello " + this.name.toString() + "!";
let f = function () {
return s;
}
s
仅在加载时获得其值,并且错误this
。
使其以这种方式工作的唯一方法是从中生成函数:
let s = new Function("return `Hello ${this.name}!`;");
并将其用作:
let f = function () {
return s.call(this);
}
有点奇怪,但会奏效。