7

ObjectChrome のコンソールの一部のオブジェクトがコンストラクター関数名の代わりに表示されていることに気付いたとき、私は今日いじっていました。

これは奇妙だったので、次のコードに要約しました。

function Baz() {
    this.baz = true;
}
var b = new Baz();
var c = Object.create(b);
console.log(b); // why is b outputting with Object not Baz?

上記のコードbでは、 は a を介して作成されてObject.createいませんが、ログに記録すると Object と表示されます。そこにはタイプミスはなく、誤って c について質問しています。b のログは、そのオブジェクトに触れていないときに変更されました。別のインスタンスを作成してc、変更しないでくださいb

これは Chrome のバグですよね?とにかくChromeにここで正しく報告させる方法はありBazますか?

これは、デバッグ目的で重要です。

ここに画像の説明を入力

更新バグが提出されました: https://code.google.com/p/chromium/issues/detail?id=478522

4

1 に答える 1

5

更新: これは確かに Chrome 41 と Chrome 42 の間のリグレッションです。ここで追跡されています: http://crbug.com/478522

Chrome 41 の出力: ここに画像の説明を入力

Chrome 42 の出力:

彼らは、開発ツールに入力する際の構文の強調表示を改善しましたが、これはおそらく壊れています。開発ツールに深く関わっている友人に連絡しました。素敵な発見。


いいえ、あなたが説明する問題は非常に現実的です。

コンストラクターで作成されたオブジェクトは、それらをログに記録するときにその名前が表示され、一般的に Chrome (および node/io.js) でのデバッグ エクスペリエンスが向上します。

このためObject.create、概念的には好きですが、自分のコードではプロトタイプの継承を避けています。

あなたはこれを理解していると思いますが、将来の読者のために明確にしたいと思います. Object.create バージョンでも継承が行われることに注意してください。唯一の違いは、オブジェクトがどのようにログに記録され、デバッガーで処理されるかです。

于 2015-04-19T11:59:27.340 に答える