【发布时间】:2014-05-01 17:10:18
【问题描述】:
我正在使用新的 ES6 Template Literals 功能,我想到的第一件事是用于 JavaScript 的 String.format,所以我着手实现一个原型:
String.prototype.format = function() {
var self = this;
arguments.forEach(function(val,idx) {
self["p"+idx] = val;
});
return this.toString();
};
console.log(`Hello, ${p0}. This is a ${p1}`.format("world", "test"));
但是,模板文字在传递给我的原型方法之前进行了评估。有什么办法可以编写上面的代码将结果推迟到动态创建元素之后?
【问题讨论】:
-
你在哪里执行这个?我想,最新的 JS 实现都没有这个实现。
-
@thefourtheye 在 ES6Fiddle 中,链接到问题中
-
我认为对于
.format()方法,您不应该使用模板字符串,而应该使用纯字符串文字。 -
@Bergi 这并不是一个字面上的问题,更多的是一个假设的例子。似乎将预处理的输出传递给函数可能是一个常见的用例
-
值得指出的是,反引号字符串只是字符串连接和表达式求值的语法糖。
`foo ${5+6}`评估为"foo 11"将格式方法附加到字符串原型将允许您做一些愚蠢的事情,例如:`My ${5+6}th token is {0}`.format(11)应该评估为"My 11th token is 11"。
标签: javascript ecmascript-6 template-literals