如何指定在执行console.log对象时要显示的属性?

时间:2016-04-27 11:06:48

标签: javascript properties

从构造函数创建对象时,有时是结果对象 使用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上的财产,怎么样?

5 个答案:

答案 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.dirconsole.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;})())