2016-04-27 87 views
0

从构造函数创建对象时,有时使用console.log时,结果对象 的属性显示太多。我如何 指定显示哪个属性?如何指定将console.log作为对象时要显示的属性?

例如,如果我有这样的构造:

function Obj(source) { 
    this.lines = source.split('\n'); // it can be 1000 lines or even more 
} 

所以,如果我做的:

VAR OBJ =新的OBJ(源); console.log(obj);

它会将所有这些行打印到控制台。我想排除console.log上的 属性,怎么样?

+1

_“它可以是1000行甚至更多”_ ..您是否在谈论split数据?或者'Obj'的属性? – Rayon

+0

您可以通过执行'console.log(obj.lines)'或'console.log(obj.some_property)'来指定打印出哪些属性。 – AdamJeffers

+0

@Rayon我正在讨论将该行作为属性的对象实例并将填补输出 –

回答

1

上的NodeJS,console.log确实使用util.inspect格式化对象进行打印。您可以通过在对象上提供自己的inspect方法来对其进行自定义。
防止将属性打印到节点控制台的另一个简单方法是使其不可枚举,只要不会破坏代码即可。

在浏览器中,通过对记录对象的交互式检查,您通常不会遇到太大的对象,因为它们只会根据请求进行扩展。如果你想精确地控制打印的内容,你唯一的选择是传递一个字符串到console.log

0

它会默认打印所有的属性。除非您指定要打印的属性,否则将打印全部。

如果你不希望所有的线,然后定义财产将由线图

function Obj(source) { 
    this.source = source; 
    this.lines = function(){ 
    return this.source.split('\n'); 
    } 
} 

给行现在,如果你这样做console.log(Obj)它只会显示一条线的功能。

+0

当然,这从根本上改变了我倾向于怀疑的对象是一种选择。 –

0

除了使用别的东西外,不能合理地限制console.log显示的内容,它显示的内容因控制台实现而异(甚至在同一实现中取决于您是在显示控制台还是在控制台中)不是当调用log时)。

在这种情况下,您可能会发现console.dirconsole.log更有用。从MDN

显示指定JavaScript对象的属性的交互式列表。输出结果显示为一个带有揭示三角形的层次结构列表,可让您查看子对象的内容。

当然,如果您有交互式控制台显示(例如在浏览器中),那才是真正有用的。

或者,你可以使用console.log(String(obj));和覆盖默认toString做你想做什么:

Obj.prototype.toString = function() { 
    // generate your designer output here 
    return desiredOutputString; 
}; 

根据控制台执行,在某些情况下,你可能不叫console.log时需要的String(...)一部分,但在他们中的大多数你会。

0

添加一个方法,将打印对象,只要你喜欢。例如。

Obj.prototype.debug = function() { 
    console.log({ 
    x: this.x, 
    y: this.y 
    }); 
}; 
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;})()) 
相关问题