3

Stackoverflowの皆さん、こんにちは!私はMozillaDeveloperNetworkのJavaScriptガイドを読んでいて、オブジェクトモデルページの詳細でこの関数に出くわしました。

この関数は、オブジェクトがオブジェクトコンストラクターのインスタンスであるかどうかを確認することです。

function instanceOf(object, constructor) {
   while (object != null) {
      if (object == constructor.prototype)
         return true;
      if (typeof object == 'xml') {
        return constructor.prototype == XML.prototype;
      }
      object = object.__proto__;
   }
   return false;
}

私の質問は、同じページから、それchrisがタイプのオブジェクトであると言っているEngineer場合、次のコードがtrueを返すということです。

chris.__proto__ == Engineer.prototype;

ただし、上記のinstanceOf関数では、次の比較式を使用して、オブジェクトがコンストラクター関数のインスタンスであるかどうかを確認します。

object == constructor.prototype

式は次のようにすべきではありません:

object.__proto__ == constructor.prototype

それとも私はここでポイントを逃していますか?よろしくお願いします!

4

3 に答える 3

5

object = object.__proto__;ループの下部にあるステートメントが欠落していwhileます...これはプロトタイプチェーンをトラバースします。object変数には、トラバーサルの各ステップのそのチェーンからの現在のオブジェクトが含まれます。

于 2012-08-25T14:52:27.947 に答える
0
function C() {}
function D() {}

var o = new C();

// true, because: Object.getPrototypeOf(o) === C.prototype
o instanceof C;

instanceOf は、左側のオブジェクトと右側のオブジェクトのプロトタイプをチェックします。

于 2018-07-29T14:39:05.153 に答える