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 タブ) に直接ジャンプできる場合もあります。

アーカイブしたいポイントは何ですか?

于 2013-01-12T22:23:47.077 に答える
0

より有用な情報とは何を意味しますか? コンソールの左矢印をクリックして、オブジェクトのプロパティ リストを取得できます。

また、console.log の実装はコンソールごとに異なります。firebugconsoleは、意志と同じ方法でオブジェクトを出力しませんchrome dev tools console

オブジェクトと一緒にログに記録する情報を追加したい場合は、console.log を実行する前に別のオブジェクトにラップすることができますが、これはデバッグ目的としてのみ意味があります。console.log(myObjectWrapperFn(new Widget()));

于 2013-01-12T22:24:45.717 に答える