0

なぜ:

console.log(Object.hasOwnProperty("hasOwnProperty"));   

false を返しますが、:

console.log(Object.prototype.hasOwnProperty("hasOwnProperty"));  

真のステートメントを返しますか?

hasOwnProperty がオブジェクトの事前構築済みメソッドであることは認識していますが、私の質問は、オブジェクトとオブジェクトのプロトタイプの違いは何だと思います。
それらはまったく同じではありませんか?
コードの 1 行目でオブジェクトを参照するとき、上記のコードの 2 行目で同じコード行を参照していませんか?

編集: 上の 2 行のコードを修正:

console.log(Object.hasOwnProperty);

と:

console.log(Object.prototype.hasOwnProperty);  
4

2 に答える 2

1

両方とも同じ関数Object.hasOwnPropertyObject.prototype.hasOwnProperty参照します。その関数を独自のプロパティとして含み、継承されたプロパティとして含みます。Object.prototypeObject

つまり、hasOwnProperty関数はObject.prototypeオブジェクトに対して(メソッドとして)定義されます。次に、Objectコンストラクター(他のほとんどすべてのネイティブオブジェクトと同様)は(すべてのメソッド)をから継承しObject.prototypeます。

ところで、の継承チェーン(プロトタイプチェーン)Objectは次のとおりです。

Object -> Function.prototype -> Object.prototype -> null

したがって、とObjectの両方からすべてのメソッドを継承します。Function.prototypeObject.prototype

于 2013-02-11T17:53:03.160 に答える
0

hasOwnProperty は、オブジェクトのビルド済みメソッドであることを認識しています。

実際には、すべてのJavaScript オブジェクトが継承するオブジェクトの列挙不可能なプロパティに対する関数です。これにはObject関数オブジェクトが含まれます。

しかし、私の質問は、オブジェクトとオブジェクトのプロトタイプの違いは何だと思います。それらはまったく同じではありませんか?

いいえ、そうではありません。EcmaScript 仕様のLanguage OverviewのObjects に関するセクションでは、かなりよく説明されていると思います。各オブジェクトには、継承元のオブジェクトへの非表示の[[prototype]]リンクがあります (まで) - プロパティが検索される「プロトタイプ チェーン」を構築します。関数の publicプロパティはそれとは異なり、関数によって構築されるすべてのインスタンスが継承するオブジェクトを指します。nullprototype

于 2013-02-11T17:55:07.080 に答える