在javascript中记录对象时如何强制toString

时间:2015-03-27 12:57:33

标签: javascript oop

我想知道是否可以获得这里的内容"作为此代码的响应(例如日志):

function Obj () {
    this.toString = function(){ return "content here" };
}
var obj = new Obj;
console.log(obj);

我知道我可以用String(),toString()和"" + obj强制它,但我想知道是否有一种方法可以从对象中强制它。

1 个答案:

答案 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);
};

...但我不推荐