2017-06-01 1 views
0

MozillaはhasOwnProperty docオブジェクト内のプロパティにhasOwnProperty()は、再定義された継承されたメソッド(toString())に対してtrueを返しますが、Mozilla docsはそうではないと言いますか?

割り当てがオブジェクトインスタンスに属するものとしてプロパティを表示するためにデバッガを引き起こすであろうと言います。これは "hasOwnProperty"が真であることを意味しません。 プロパティがプロトタイプから継承されるとき、オブジェクトに独自のコピーがある場合でも、 "hasOwnProperty()"はfalseです。試験する

新しいオブジェクト(o)において、Iは、再定義されたObject.prototype.toString()方法下記のように:

o = new Object(); 
o.toString = function(){ 
    console.log("ToString redefined"); 
} 

Object.toString(); 

o.hasOwnProperty('toString'); 

AFAIU、toString()は、再定義され、それは継承されたプロパティのためfalseを返す必要があり、それtrueを返します。親切に説明しますか?誰かが例で次のように説明できる場合

また、それは素晴らしいことだ:オブジェクト内のプロパティに

割り当てはデバッガがオブジェクトインスタンスに属するものとしてプロパティを表示するようになります。これは "hasOwnProperty"が真であることを意味しません。

おかげ アプリ

+1

誰かがあなたが最近引用したセクションを追加しました:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty$compare?to=1246267&from=1226101私は彼らが何を説明しようとしているのかよくわからないが、私が懸念している限り、彼らが言っていることは間違っている。 –

+2

私はそのセクションを削除しました:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty$compare?to=1251159&from=1248455 –

答えて

0

継承はプロトタイプチェーンを介して動作します:あなたがオブジェクトのプロパティにアクセスしようとすると、それはそのオブジェクトのプロパティを返します。オブジェクト自体にそのプロパティがない場合は、そのプロパティが見つかるか、チェーンが終了するまで、そのプロトタイプが同じプロパティに対してチェックされます。だから、

let o = {}; 
o.toString(); 

これはoのプロトタイプのプロパティtoStringを見つけました。

o.toString = function() {}; 
o.toString(); 

は今、自身が(あなたはそれに直接割り当て)toString性質を持っているo以来、プロトタイプチェーンを通過する必要はありません。今それの所有財産を持っていますtoString

関連する問題