次のJavaScriptコードはとてもわかりやすいものです。誰でも私の理解を助けることができますか? PersonYはプロトタイププロパティを持たないのはなぜですか?関数と新しい関数のJavaScriptの相違点
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
次のJavaScriptコードはとてもわかりやすいものです。誰でも私の理解を助けることができますか? PersonYはプロトタイププロパティを持たないのはなぜですか?関数と新しい関数のJavaScriptの相違点
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
PersonX = function(){};
PersonX
に匿名関数への参照を配置します。 PersonX
は関数を指します。
PersonY = new function(){};
PersonY
に匿名コンストラクタ関数の新たに構築されたインスタンスへの参照を配置します。 PersonY
はオブジェクトを指します。
プロトタイプに関しては、PersonY
に1があります。ただし、コンストラクタbeforeまたはafterインスタンスにアタッチされたプロパティおよびメソッドがないため、ブランクプロトタイプ *があります。
console.log(PersonY)
を実行すると、実際にPersonY
のプロトタイプを確認できます。プロトタイププロパティがあることがわかります(Chromeで__proto__
と表示されています)。これは「空白」です。しかし、それはオブジェクトを作成するコンストラクタ関数であるconstructor
の2つの隠れたプロパティと、Object
オブジェクトである次の "チェーンリンク"につながるもう一つの__proto__
を持っています。
※プロトタイプはチェーンなので空白ではありません。このプロトタイプレベルは空白かもしれませんが、次の上位のプロトタイプがこの場合にはプロパティとメソッドを持つ場合があります。それは実際には関数のコピーとしてメモリ内にインスタンス化されたオブジェクトであるためです
Object prototype -> Constructor prototype -> Your Instance will have:
- toString() - blank - toString()
- hasOwnProperty() - hasOwnProperty()
- and more... - and more...
- ...but nothing from Constructor
。プロトタイプは実際にインスタンスの作成のコンテキストで意味を持つだけなので、作成されるとその意味の論理的な構成はありません。
'function'ではなく' function'を使います。 –
ちょうど[決して2番目の構造を使用する](http://stackoverflow.com/q/10406552/1048572)。 – Bergi