1

検討:

var o = { a: 1, b: 2, toString: function() { return "foo"; } };

Chrome 開発ツール:

デバッグのスクリーンショット

o完全なオブジェクトではなく、デバッグ コンソールに表示されるオブジェクトに対してできることはあり"foo"ますか?

4

1 に答える 1

2

これが私の試みです:

(function() {
    var cl = console.log;
    console.log = function() {
        cl.apply(console, [].slice.call(arguments).map(function(el) {
            return {}.toString.call(el) === '[object Object]' && typeof el.toString === 'function' && el.toString !== Object.prototype.toString ? el.toString() : el;
        }));
    };
}());

^console.log呼び出しの前にこのスクリプトをスローするだけです。


テストケース:

console.log('str', 42, /rege?x/, { a: 1 }, [1, 2], {
        toString: function() { return "foo"; }
    }, new function() {
        this.toString = function() {
            return 'bar';
        };
    }
);

console.log 出力


これは、toStringメソッドが異なる単純な/構築されたオブジェクトObject.prototype.toStringをその.toString()値にマップするだけです。hasOwnPropertyコンストラクターもtoStringプロトタイプにメソッドを持っている可能性があるため、この方法を選択しました。

ご覧のとおり、すべてのオブジェクトとプリミティブでさえtoStringネイティブ コンストラクターからメソッドを継承するため、特定のユース ケースでは微調整が必​​要になる場合があります。toStringたとえば、上記のスニペットは、関数オブジェクトをカスタム プロパティで文字列化していません。

于 2013-08-21T22:48:20.537 に答える