从构造函数创建对象时,有时是结果对象
使用console.log
时要显示的属性太多。我怎么能够
指定要显示的属性?
例如,如果我有这样的构造函数:
function Obj(source) {
this.lines = source.split('\n'); // it can be 1000 lines or even more
}
所以,如果我这样做:
var obj = new Obj(source); 的console.log(OBJ);
它会将所有这些行打印到控制台。我想排除这一点
console.log
上的财产,怎么样?
答案 0 :(得分:1)
在nodejs上,console.log
确实使用util.inspect
格式化对象进行打印。您可以在对象上提供自己的inspect
方法来自定义它
阻止属性打印到节点控制台的另一种简单方法是使其不可枚举,只要这不会破坏您的代码。
在浏览器中,通过对已记录对象的交互式检查,您通常不会遇到太大的对象问题,因为它们只会在请求时展开。如果您想要精确控制打印的内容,您唯一的选择是将字符串传递给console.log
。
答案 1 :(得分:0)
默认情况下会打印所有属性。除非您指定要打印的属性,否则它将全部打印。
如果你不想要所有的行,那么将属性定义为一个逐行提供的函数
function Obj(source) {
this.source = source;
this.lines = function(){
return this.source.split('\n');
}
}
现在如果你console.log(Obj)
,它只显示一行。
答案 2 :(得分:0)
除了使用别的东西,不,你不能合理地限制console.log
显示的内容,它显示的内容因控制台实现到控制台实现而异(或者甚至在同一个实现中,取决于你是否&# 39;在调用log
时重新显示控制台。
在这种情况下,您可能会发现console.dir
比console.log
更有用。来自MDN:
显示指定JavaScript对象的属性的交互式列表。输出显示为分层列表,其中包含透明三角形,可让您查看子对象的内容。
当然,如果你有一个交互式控制台显示器(例如在浏览器中),那只会非常有用。
或者,您可以使用console.log(String(obj));
并覆盖默认toString
来执行您想要的操作:
Obj.prototype.toString = function() {
// generate your designer output here
return desiredOutputString;
};
根据控制台的实施情况,在某些情况下,您在调用String(...)
时可能不需要console.log
部分,但在大多数情况下,您可以这样做。
答案 3 :(得分:0)
添加一个可以根据需要打印对象的方法。 E.g。
Obj.prototype.debug = function () {
console.log({
x: this.x,
y: this.y
});
};
答案 4 :(得分:0)
如果只是在日志记录中要省略您可以定义的属性并立即调用console.log
命令中的函数。
该函数可以复制对象,从中删除lines
属性并记录生成的对象:
function Obj(source) {
this.lines = source.split('\n'); // it can be 1000 lines or even more
}
var obj = new Obj(source);
console.log((function(){var copy = Object.assign({}, obj); delete copy.lines; return copy;})())