当我创建新的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中?
答案 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 之外的其他条件来决定什么以及如何进行字符串化。