2016-08-04 9 views
1

私はなぜ警告(John.hasOwnProperty( 'firstName')); firstNameはPersonプロトタイプで定義されていますが、インスタンスのJohnでは定義されていませんが、trueを返します。javascript hasOwnPropertyはfalseの代わりにtrueを返しますか?

https://jsfiddle.net/xfdnsg2w/

Person = function(firstName, lastName) { 

     this.firstName = firstName; 
     this.lastName = lastName; 

    } 

    var John = new Person("John"); 
    alert(John.hasOwnProperty('toString')); 
    alert(John.hasOwnProperty('firstName')); 
+3

'Person.prototype'で定義している場合は、' Person.prototype.firstName'にそれを割り当てます。あなたの 'firstName'や' lastName'のようなプロパティは通常、あなたが持っている方法で定義され、インスタンス固有です(プロトタイプチェーンではなくオブジェクト自体が所有します)。 –

答えて

4

あなたのコード内の "firstNameの" プロパティは、は人のプロトタイプで定義されていません。これはコンストラクタ内で「独自の」プロパティとして初期化されます。

プロトタイプに「firstName」と「lastName」プロパティがあったとしても、コンストラクタで値を割り当てるとすぐに、それはとにかく「独自の」プロパティになります。プロトタイププロパティは一般にアクセスするプロパティとして使用され、通常は値としての関数を持ちます。

関連する問題