私は最近、ガイドを見て、hasOwnPropertyの概念をよりよく理解したかったのです。 MozillaによればなぜオブジェクトでhasOwnProperty( 'toString')が機能しないのですか?
:
「hasOwnPropertyを()メソッドは、オブジェクトが(継承されない)自身のプロパティとして指定された性質を持っているかどうかを示すブール値を返します。」
私はオブジェクトに
var test = {yes:function(){}}
を作成し、
test.hasOwnProperty('toString')
を行なったし、それはfalseが返さ。なぜなら、toStringはテストの中で正しく作成していないメソッドなのですから?
しかし、私は配列にhasOwnPropertyをを記録し、長さを渡すので、
var arr1 = new Array
arr.hasOwnProperty('length') //appears to return true
場合、それはtrueを返しますが、私は長さを宣言したことはありません。
私はhasOwnPropertyをのみ継承されないプロパティに働くと思った -
配列オブジェクトは、lengthプロパティを継承するときに、なぜ、アレイ上にhasownprop(「長さ」)を使用してtrueを返すん、
しかし
var test = {yes:function(){}}
test.hasOwnProperty('toString') //false
なぜこれがfalseを返しますか? toStringはオブジェクトのプロトタイプのメソッドで、Google Chrome Consoleにログオンすると表示されます
アレイ上の 'length'プロパティが継承されていません。すべての配列には独自の長さがあります。 – melpomene
'toString'は(オブジェクトのプロトタイプから)継承されています。すべての(バニラ)オブジェクトは同じ 'toString'メソッドを持ちます。 – melpomene
@melpomene実際、 '.length'は' Array.prototype'の特別なgetter/setterプロパティであると考えられます。もちろん、あなたは正しい、そうではありません。 – Bergi