2012-01-09 8 views
2

Google Chrome(この執筆時点では最新の安定版、16.0.912.75 m)でバグが見つかった可能性があります。Chromeコンソールでlog()で表示されるのは何ですか?

var FakeFancy = function() {}; 
console.log(new FakeFancy()); 

var holder = { 
    assignTo : function (func) { 
     holder.constructor = func; 
    } 
}; 

holder.assignTo(function() { this.type = 'anonymous' }); 
var globalConstructor = function() { this.type = 'global' } 

console.log(new holder.constructor()); 

あなたはFirefoxでそのブロックを実行した場合、それは、両方ともローカル有する第2のタイプ=と「オブジェクト」として記載されているかなり良い示しています。 Chromeで実行すると、

> FakeFancy 
> globalConstructor.type 

が表示されます。ツリーを展開すると内容が正しいことがわかります。しかし、ログに記録された各オブジェクトの最初の行としてChromeがリストしているものを特定することはできません。私はプロトタイプを操作していないので、これらはどこからでも継承されない普通の古いオブジェクトでなければなりません。

最初は、WebKitに関連していると思っていましたが、最新のSafari for Windows(5.1.2 7534.52.7)で試してみましたが、どちらも「オブジェクト」として表示されます。

私は、コンストラクターがどこから呼び出されたかについていくつか推測しているように思っています。匿名のコンストラクタのインダイレクションはそれを乱していますか?

+1

あなたの質問が最初の2行とその出力についてのみである場合、なぜ余分なコードを含めるのですか? (しかし、私は、Chromeが最初の行に挙げられているものを理解することはできません。)私は誤解する必要があります... – Domenic

+0

それを残念にして、明快な編集を追加しました。ログに記録された各オブジェクトの最初の行。 –

答えて

1

最初の行は、WebKitのコンソールは、一般的に、あなたはそれが出力のオブジェクトの種類を知っているように、「コンストラクタ名の推論」を行おうと

console.log(new FakeFancy()); 

の結果です。私の推測では、

function FakeFancy() {} 

よう

var FakeFancy = function() {}; 

だけではなく、もののようにコンストラクタ宣言のための推論を行うことができます(サファリ5.1とは反対に)あなたがいる理由ようだより新しいバージョンは、Chromeで含まれていることです視差を見る。

関連する問題