考虑:
var o = { a: 1, b: 2, toString: function() { return "foo"; } };
在 Chrome 开发工具中:
我可以对对象做些什么,以便o
在调试控制台中显示"foo"
而不是完整对象?
考虑:
var o = { a: 1, b: 2, toString: function() { return "foo"; } };
在 Chrome 开发工具中:
我可以对对象做些什么,以便o
在调试控制台中显示"foo"
而不是完整对象?
这是我的尝试:
(function() {
var cl = console.log;
console.log = function() {
cl.apply(console, [].slice.call(arguments).map(function(el) {
return {}.toString.call(el) === '[object Object]' && typeof el.toString === 'function' && el.toString !== Object.prototype.toString ? el.toString() : el;
}));
};
}());
^ 只需在任何console.log
调用之前抛出此脚本。
console.log('str', 42, /rege?x/, { a: 1 }, [1, 2], {
toString: function() { return "foo"; }
}, new function() {
this.toString = function() {
return 'bar';
};
}
);
这只是将具有与其值toString
不同的方法的普通/构造对象映射。我选择了这种方式,因为构造函数的原型中也可能有一个方法。Object.prototype.toString
.toString()
hasOwnProperty
toString
如您所见,所有对象甚至基元都toString
从本机构造函数继承方法,因此您可能需要针对特定用例进行调整。例如,上面的代码片段不会使用自定义toString
属性对函数对象进行字符串化。