I\'m thinking in particular of Chrome, though Firebug would be interesting to. I\'ve tried toString() and valueOf(), but neither of those seem to be used. Interestingly, i
You should get a better result from Firebug, you should get
var a = function(){};
console.log(a); // output: function
a.toString = function(){ return 'a'; };
console.log(a); // output: function, {toString()}
a.valueOf = function(){ return 'v'; };
console.log(a); // output: function, {toString(), valueOf()}
http://code.google.com/p/fbug/issues/detail?id=3117
Just for future readers, there is now a way to do exactly what is asked here.
For the solution please read this duplicated post:
adjust console.log behaviour of custom object
There's no way I know of. Your best bet will be to define a toString()
method on the object you want to log and then call it, either directly or indirectly:
var o = {};
o.toString = function() {
return "Three blind mice";
};
console.log("" + o);
console.log(o.toString());
You can do this in Chrome nowadays with a devtools custom formatter. They don't seem to be officially documented anywhere, and aren't enabled by default -- so you have to enable them in (Dev Tools Settings) > Console > Enable Custom Formatters. But then you can add a custom formatter for your object:
class CustomClass {
constructor (foo, bar) { this.foo = foo; this.bar = bar; }
}
window.devtoolsFormatters = (window.devtoolsFormatters || []).concat([{
header: (obj) => {
if (obj instanceof CustomClass) {
return ['div', {}, `CustomClass(${obj.foo}, ${obj.bar})`];
} else {
return null; // fall back to default formatter
}
},
hasBody: () => true, // if the user can expand to get more info
body: (obj) => {
return ['div', {},
['span', {style: 'display: block; font-weight: bold'}, 'CustomClass'],
['span', {style: 'display: block; margin-left: 2em'}, `foo: ${obj.foo}`],
['span', {style: 'display: block; margin-left: 2em'}, `bar: ${obj.bar}`],
];
}
}]);
A few words of warning:
div
and span
to work; p
, strong
, and other elements all failed. But you can emulate them with CSS.window.devtoolsFormatters
array is null by default, but I added the check because extensions may already add their own custom formatters.You can find a bit more information here: https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview