2013-01-12 15 views
1

說我寫了一個Widget類。當有人將它們傳遞給console.log時,是否可以控制我的對象的顯示方式?

function Widget() {} 

有人使用我Widget類發送一個實例console.log

console.log(new Widget()); // ▶ Widget 

有沒有什麼辦法讓我控制該控件在控制檯中的顯示方式?注意看下面顯示:

console.log(window.location) // ▶ Location 
console.log(document) // ▶ #document 
console.log(document.body) // ▶ <body class="ask-page">…</body> 

如果我要當一個Widget實例發送到console.log顯示更多有用的信息是什麼?我想我可以用我自己的實現替換console.log,但我正在尋找更優雅的東西。 console.log是否搜索可以控制輸出的特定功能?

更新:有人問我想達到什麼。這是一個簡單的例子。我在JavaScript中編寫了一個UrlBuilder類,它使用Object.defineProperty來創建屬性訪問器。 (這是我無法解決的一個限制。)問題是,每當有人發送UrlBuilder實例到console.log時,我想輸出URL。但是,它會顯示▶ UrlBuilder。即使展開三角形顯示,您也看不到任何有用的內容,因爲屬性訪問器列在__proto__屬性中。它看起來像一個空的無用對象,將URL作爲字符串顯示會更有用。

回答

1

嘗試用您希望日誌顯示的表示法覆蓋對象中的tostring()。不是100%確定這是否可行,但這是如何在其他語言中完成的。也請看看這個:valueOf() vs. toString() in Javascript,這可能會說明一些問題。

+0

感謝您的鏈接, @DWright。我認爲'valueOf'可能是解決方案,但這不同於Chrome的控制檯。 =/ –

+0

並且'toString()'也不是。也許正確的答案是提交一個Webkit錯誤。 –

0

控制檯的輸出沒有標準,如果你使用Firefox或Chrome的控制檯,你會得到其他輸出,有時你可以直接跳轉到元素(firebug中的DOM標籤)。

你想用它來點什麼?

0

你是什麼意思更多有用信息?您可以單擊控制檯中的左側箭頭以獲取對象的屬性列表。

此外,console.log實現在每個控制檯中都有所不同。螢火蟲console將不會以與chrome dev tools console相同的方式輸出對象。

如果你想添加的信息與你的對象被記錄下來,也許你可以把它包裝成另一種做的console.log之前,但它纔有意義爲目的的調試:console.log(myObjectWrapperFn(new Widget()));

相關問題