我可以在console.log中打印像Date这样的字符串吗?

时间:2017-04-06 06:52:30

标签: javascript node.js date format

当我创建新的Date对象并使用console.log时,不显示对象,而是将时间显示为字符串。 但是,MyObject打印为Object。

示例:

const date = new Date();
console.log(date);

const MyObject = function() {
  this.name = 'Stackoverflow',
  this.desc = 'is Good'
};
console.log(new MyObject());

结果:

2017-04-06T06:28:03.393Z
MyObject { name: 'Stackoverflow', desc: 'is Good' }

但我想在不使用函数或方法的情况下打印MyObject,如下所示。

Stackoverflow is Good

在java中,我可以覆盖toString ()来实现它。 是否有可能在JavaScript中?

3 个答案:

答案 0 :(得分:0)

我不认为console.log提供任何机制来告诉它用于对象的表示。

您可以执行console.log(String(new MyObject()));MyObject.prototype toString方法:

const MyObject = function() {
  this.name = 'Stackoverflow';
  this.desc = 'is Good';
};
MyObject.prototype.toString = function() {
    return this.name + this.desc;
};

当您正在使用ES2015 +功能时(我从const看到),您可能还会考虑class语法:

class MyObject {
  constructor() {
    this.name = 'Stackoverflow';
    this.desc = 'is Good';
  }
  toString() {
    return this.name + this.desc;
  }
}

答案 1 :(得分:0)

提示:在javascript中,您仍然可以使用“覆盖”方法来实现它

演示:

let myobj={id:1,name:'hello'};

Object.prototype.toString=function(){ 

   return this.id+' and '+this.name

}; //override toString of 'Global' Object.

console.log(obj.toString());// print: 1 is hello

答案 2 :(得分:0)

实际上非常简单:

let oldLog = console.log;
console.log = function ()
{
    for (let i = 0; i < arguments.length; i++)
        if (arguments[i] && arguments[i].toString)
            arguments[i] = arguments[i].toString();
    oldLog.apply(null, arguments);
}

您的对象应带有一个 toString 方法。可能使用除 toString 之外的其他条件来决定什么以及如何进行字符串化。