Есть ли способ, который я могу переопределить на объекте JavaScript, чтобы контролировать то, что отображается console.log?

Я думаю, в частности, о Chrome, хотя Firebug было бы интересно. Я попытался toString() и valueOf(), но ни один из них, похоже, не используется. Интересно, что если я возьму функцию, она отобразит определение функции, но если я добавлю метод toString(), он отобразит нуль!

var a = function(){};
console.log(a); // output: function (){}
a.toString = function(){ return 'a'; };
console.log(a); // output: null
a.valueOf = function(){ return 'v'; };
console.log(a); // output: null

Любые идеи?

Ответ 1

Я не знаю. Лучше всего будет определить метод toString() для объекта, который вы хотите записать, а затем вызвать его прямо или косвенно:

var o = {};
o.toString = function() {
    return "Three blind mice";
};

console.log("" + o);
console.log(o.toString());

Ответ 2

Вы должны получить лучший результат от Firebug, вы должны получить

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