1
  1. プロパティが null または未定義である可能性はありanyObject.constructorますか (特に ConstructorFunc.prototype が変更/上書きされていない場合)?
  2. var date = new Date(); console.log(date.constructor);// "Date()" を記録します。いいよ。
    var data = new Array(1, 2, 3); console.log(data.constructor);// [ undefined ] のようなログを記録します。それは何ですか、なぜ Array() ではないのですか。

ティア

4

2 に答える 2

3
  1. .constructorはい、コンストラクター関数のprototypeオブジェクトのプロパティを手動で上書きできます。

  2. constructorプロパティが変更されたようです。function Array() { [native code] }通常、おそらく の代わりに のようなものが表示され[ undefined ]ます。

確認するためにできることの1つは...

console.log(typeof [].constructor);

それはあなたに与えるはずです"function"。が表示される場合は"object"、変更されています。


コンソール出力を信用しない

Firebugでテストしているようです。

原則として、コンソール ロギングを信頼しすぎないようにしてください。コンソールは環境へのアドオンであり、ログに記録するために与えられたものを解釈する必要があります。時々解釈が誤解を招きます。

奇妙な結果が得られた場合は、他のテストを実行してください...

console.log(Array);          // [ undefined ] ...huh???
console.log([].constructor); // [ undefined ] ...huh???

typeof [].constructor; // Firebug still gives "function"

[].constructor === Array; // Firebug returns true

Arrayしたがって、Firebug が関数自体の奇妙な解釈を行ったとしても、それがまだ期待されるコンストラクターであるという事実は変わらないことがわかります。

于 2012-07-27T18:57:40.767 に答える
0
  1. constructorプロパティはですwritable。したがってanyObject.constructor、明示的にundefinedまたはに設定できますnull(これにより、に新しいプロパティが作成され、のプロパティはanyObject変更されません)。toまたはのプロパティを変更して、関数のすべてのインスタンスに反映されるようにすることもできます。デフォルトでは、またはになることはありません。constructorprototypeconstructorprototypenullundefinednullundefined

  2. 期待通りに表示function Array() { [native code] }されます。同じ結果が得られないため、Array.prototype.constructorサードパーティのコードによって変更されている可能性があります。あなたはそれをチェックするべきです。

于 2012-07-27T19:08:04.950 に答える