Javascript 用户定义的原型与控制台上的对象一起返回



在JavaScript中,我注意到我的控制台.log打印对象以及任何用户定义的原型。

Date.prototype.getWeekNumber = function() {
}
Date.prototype.addDay = function() {
}
a = new Date();
console.log(a);
console.log("a - " + a);

输出:

[object Date] {
  addDay: function() {
},
  getWeekNumber: function() {
}
}
"a - Mon Jun 03 2019 13:58:05 GMT-0400 (Eastern Daylight Time)"

将控制台.log输出转换为字符串会按预期呈现值,但是如果您只是控制台对象,是否可以采取任何措施来整理控制台,以便仅打印对象以进行调试,并且在从代码中删除用户定义的原型时不会像以下输出一样扩展用户定义的原型?

[object Date] { ... }
"a - Mon Jun 03 2019 14:01:00 GMT-0400 (Eastern Daylight Time)"

没什么大不了的,但我找不到类似的问题,所以我想我会问。提前谢谢。

默认情况下,属性是可枚举的。这意味着在检查对象的属性时,它们被认为很重要。

可以将Object.definePropertyenumerable: false一起使用,以创建不可枚举的属性。它仍然存在,但当要求显示其所有属性时,不会列出它。

// Properties are enumerable by default.
Date.prototype.enumerable = function() {
  return 'enumerable';
};
// Use Object.defineProperty to create a non non enumerable property
Object.defineProperty(Date.prototype, 'nonEnumerable', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: function() {
     return 'nonEnumerable'; // logic todo...
  }
});
a = new Date();
// Iterate over all enumerable keys
for (const key in a) {
  console.log('enumerable key: ' + key); // only 'enumerable' is logged
}
// But both properties are present
console.log(a.enumerable())    //-> 'enumerable'
console.log(a.nonEnumerable()) //-> 'nonEnumerable'

你的意思是只将日期记录为字符串吗?

console.log(a.toString());  

或者,如果击键次数太多:

console.log(""+a);

最新更新