0

このコードがGoogleChromeで非常に奇妙に動作する理由を誰かが説明できますか?

<script>
console.log({someproperty:'hello'}) ;
Object.prototype.get = function(){} ;
</script>

コンソールに出力されるオブジェクトのコンテンツには「someproperty」がなく、代わりに関数である「getsomeproperty」があります。
Chrome21.0を使用しています。

これは期待されていますか?バグですか?

4

2 に答える 2

1

Object.prototype.getを別の設定に設定すると、そのような奇妙な動作が発生する理由を説明することはできません。ただし、その関数は、Chrome/Webkitが舞台裏で派手なオブジェクトログを生成するために使用しているものであることがほぼ確実です。

console.logの後.getを設定していても発生する理由は、コンソールの矢印をクリックしてオブジェクトを展開するまで、Chrome/Webkitがオブジェクトを取得しないためです。これは、次のjsfiddleを実行してテストできます:http://jsfiddle.net/BNjWZ/

矢印をクリックしてオブジェクトをすぐに展開すると、オブジェクトは正常に見えますが、.get = function(){};を3秒間待つと注意してください。呼び出されるには、「get」があります。

22.0.1229.79でこの動作(オブジェクト表示の奇妙な「get」と遅延オブジェクトロギングの両方)が見られます

于 2012-09-28T21:23:41.723 に答える
0

期待されていません。プロパティの名前に関する仕様に制限はありません。したがって、「get」は、オブジェクトのプロパティの正式な名前であり、さらに言えば、プロトタイプオブジェクトです。

コンソールのグローバルdir()関数のバグのようです。

追加:JQueryには「get」および「set」プロパティに問題があります。

于 2012-09-29T00:05:24.140 に答える