検討:
var o = { a: 1, b: 2, toString: function() { return "foo"; } };
Chrome 開発ツール:
o
完全なオブジェクトではなく、デバッグ コンソールに表示されるオブジェクトに対してできることはあり"foo"
ますか?
検討:
var o = { a: 1, b: 2, toString: function() { return "foo"; } };
Chrome 開発ツール:
o
完全なオブジェクトではなく、デバッグ コンソールに表示されるオブジェクトに対してできることはあり"foo"
ますか?
これが私の試みです:
(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';
};
}
);
これは、toString
メソッドが異なる単純な/構築されたオブジェクトObject.prototype.toString
をその.toString()
値にマップするだけです。hasOwnProperty
コンストラクターもtoString
プロトタイプにメソッドを持っている可能性があるため、この方法を選択しました。
ご覧のとおり、すべてのオブジェクトとプリミティブでさえtoString
ネイティブ コンストラクターからメソッドを継承するため、特定のユース ケースでは微調整が必要になる場合があります。toString
たとえば、上記のスニペットは、関数オブジェクトをカスタム プロパティで文字列化していません。