1

说我写一Widget堂课。

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">…&lt;/body>

如果我想在Widget实例发送到时显示更多有用的信息console.log怎么办?我想我可以console.log用我自己的实现替换,但我正在寻找更优雅的东西。是否console.log搜索可以控制输出的特定功能?

更新:有些人问我想要实现什么。这是一个简单的例子。我UrlBuilder用 JavaScript编写了一个Object.defineProperty用于创建属性访问器的类。(这是我无法绕过的限制。)问题是,每当有人向 发送UrlBuilder实例时console.log,我都想输出 URL。但是,它反而显示▶ UrlBuilder. 即使您展开显示三角形,您也看不到任何有用的信息,因为属性访问器列在__proto__属性内。它看起来像一个空的、无用的对象,将 URL 显示为字符串会更有用。

4

3 回答 3

1

尝试使用您希望日志显示的表示覆盖对象中的 tostring()。不是 100% 确定这是否可行,但这是用其他语言完成的方式。也看看这个:valueOf() vs. toString() in Javascript,这可能会有所启发。

于 2013-01-12T22:19:19.197 回答
0

控制台的输出没有标准,如果您使用 Firefox 或 Chrome 的控制台,您会得到其他输出,有时您可以直接跳转到元素(firebug 中的 DOM-tab)。

你想用它来归档有什么意义?

于 2013-01-12T22:23:47.077 回答
0

更有用的信息是什么意思?您可以单击控制台中的左箭头,以获取对象的属性列表。

此外,每个控制台中的 console.log 实现都不同。萤火虫console不会以与chrome dev tools console意愿相同的方式输出对象。

如果您想添加要与您的对象一起记录的信息,也许您可​​以在执行 console.log 之前将其包装到另一个中,但这仅作为调试目的才有意义:console.log(myObjectWrapperFn(new Widget()));

于 2013-01-12T22:24:45.717 回答