我正在考虑Chrome,尽管Firebug会很有趣。我尝试过toString()和valueOf(),但似乎都没有使用过。有趣的是,如果我接受一个函数,它将显示函数定义 - 但是如果我添加一个toString()方法,它将显示为null!
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
有什么想法吗?
答案 0 :(得分:4)
我无从知晓。您最好的选择是在要记录的对象上定义toString()
方法,然后直接或间接调用它:
var o = {};
o.toString = function() {
return "Three blind mice";
};
console.log("" + o);
console.log(o.toString());
答案 1 :(得分:1)
答案 2 :(得分:0)
你应该从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()}
答案 3 :(得分:0)
现在,您可以使用devtools自定义格式化程序在Chrome中执行此操作。它们似乎没有在任何地方正式记录,并且默认情况下未启用-因此您必须在(开发工具设置)>控制台>启用自定义格式化程序中启用它们。但随后您可以为对象添加自定义格式器:
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}`],
];
}
}]);
一些警告:
div
和span
工作; p
,strong
和其他元素都失败了。但是您可以使用CSS来模拟它们。window.devtoolsFormatters
数组默认情况下为空,但是我添加了检查,因为扩展名可能已经添加了自己的自定义格式化程序。您可以在此处找到更多信息:https://docs.google.com/document/d/1FTascZXT9cxfetuPRT2eXPQKXui4nWFivUnS_335T3U/preview