我想知道是否可以获得这里的内容"作为此代码的响应(例如日志):
function Obj () {
this.toString = function(){ return "content here" };
}
var obj = new Obj;
console.log(obj);
我知道我可以用String(),toString()和"" + obj强制它,但我想知道是否有一种方法可以从对象中强制它。
答案 0 :(得分:2)
您的修改
我知道我可以使用String(),toString()和“”+ obj强制它,但我想知道是否有一种方法可以从对象中强制它。
......改变了问题。简单的答案是“不,你不能在对象中做”。为了调用对象上的toString
,需要说“我想要这个的原始形式”(或者特别是“我想要这个字符串形式”)。 console.log
没有这样做,它提供了比此更丰富的信息。
您在对象上放置toString
意味着无论何时将其转换为字符串,您的函数都会被调用,但它不会决定何时发生。您也可以使用valueOf
。规范中有更多内容:§9.1 - ToPrimitive,§8.12.8 - [[DefaultValue]] (hint)和§9.8 - ToString。
但添加toString
(或valueOf
)并不能让你决定它何时发生;你不能,这只是由JavaScript规则或调用代码完成(显式或隐式)。
原始答案:
最简单的方法是在其上使用String
:
console.log(String(obj));
您可以添加自己的方法:
console.logString = function(s) {
console.log(String(s));
};
您可能可能会改变log
:
var old = console.log;
console.log = function(s) {
var a = Array.prototype.map.call(arguments, function(a) {
return String(a);
};
return old.apply(console, a);
};
...但我不推荐。