簡體   English   中英

Javascript用戶定義的原型與控制台上的對象一起返回

[英]Javascript user defined prototypes returned with object on console

在JavaScript中,我注意到我的console.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)"

將console.log輸出轉換為字符串將按預期方式呈現值,但是,如果您只是控制台對象,則可以做一些事情來整理控制台,以便僅打印對象以用於調試目的,而不會定義用戶定義的原型從代碼中刪除用戶定義的原型后,是否像下面的輸出一樣擴展?

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

沒什么大不了的,但是我找不到類似的問題,所以我想問一下。 提前致謝。

您是說只將日期記錄為String嗎?

console.log(a.toString());  

或者,如果擊鍵太多:

console.log(""+a);

默認情況下,屬性是可枚舉的。 這意味着在檢查對象的屬性時,將其列為重要對象。

可以將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' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM