我正在使用直接从StackOverflow源代码复制的字符串格式函数;您现在可以使用以下代码在开发人员控制台中对其进行测试:
"Logged in as {tag}, on {guilds} guild{s}".formatUnicorn({ tag: "TAG_HERE", guilds: "GUILD_COUNT", s: "s" });
我正在尝试使用这个完全相同的功能,但总是以[object Object]
作为输出。
logger.info("bot", "Logged in as {tag}, on {guilds} guild{s}".format({ tag: client.user.tag, guilds: client.guilds.size, s: client.guilds.size === 1 ? "" : "s" }));
我已经尝试require("util").inspect(...)
返回的对象,但是只输出'[object Object]'
,基本上完全相同,但是用单引号围绕它。
这是函数,如果有帮助的话。我已经重命名了这个问题的一些变量,但是在测试代码时它是来自SO源的直接副本:
String.prototype.format = () => {
let string = this.toString();
if(!arguments.length)
return string;
let type = typeof arguments[0],
replacements = "string" == type || "number" == type ? Array.prototype.slice.call(arguments) : arguments[0];
for(const index in replacements)
string = string.replace(new RegExp("\\{" + index + "\\}", "gi"), replacements[index]);
return string;
}
这可能是一个简单的错误,只是一个简单的解决方案,但我已经工作了一段时间来尝试诊断问题/让它正常工作,但我自己找不到任何解决方法。
答案 0 :(得分:2)
箭头功能执行not bind its own arguments
,因此您的功能无效。
从String.prototype.format = () => {}
更改为String.prototype.format = function () {}
会为您解决此问题。
答案 1 :(得分:0)
它很好,因为你正在使用this.toString();
而this
是一个json对象。
试一试:
String.prototype.format = function() { ...
代替:
String.prototype.format = () => { ...