mozilla
Your Search Results

    instanceof

    概要

    instanceof 演算子は、オブジェクトが自身のプロトタイプにコンストラクタの prototype プロパティを持っているかを確認します。

    構文

    object instanceof constructor

    引数

    object
    確認するオブジェクト
    constructor
    オブジェクトに対して確認を行う関数

    説明

    instanceof 演算子は、object のプロトタイプチェインで constructor.prototype の存在を確認します。

    function C(){} // コンストラクタを定義
    function D(){} // 別のコンストラクタを定義
    
    var o = new C();
    o instanceof C; // true、Object.getPrototypeOf(o) === C.prototype であるからです
    o instanceof D; // false、D.prototype は o のプロトタイプチェインに存在しないからです
    o instanceof Object; // true
    C.prototype instanceof Object // true
    
    C.prototype = {};
    var o2 = new C();
    o2 instanceof C; // true
    o instanceof C; // false、なぜなら o のプロトタイプチェインに C.prototype が存在しなくなったためです
    
    D.prototype = new C(); // 継承を使用
    var o3 = new D();
    o3 instanceof D; // true
    o3 instanceof C; // true
    

    コンストラクタの prototype プロパティの変化に基づいて instanceof による確認結果を変えてよい場合でも、標準 ECMAScript ではオブジェクトのプロトタイプの変更ができないため、オブジェクトのプロトタイプの変更により結果を変更できないことに注意してください。ただし、非標準の __proto__ 疑似プロパティを用いると変更可能です。

    instanceof と複数のコンテキスト (例: frame や window)

    異なるスコープは、別々の実行環境を持ちます。つまり、それらは別々の組み込み物 (別々のグローバルオブジェクト、別々のコンストラクタ 等々) を持ちます。これにより予期せぬ結果になる場合があります。例えば、[] instanceof window.frames[0].Array は、Array.prototype !== window.frames[0].Array であることおよび配列が以前から継承していることから false を返すでしょう。これは、始めはわかりにくいかもしれませんが、スクリプトで複数のフレームやウィンドウを扱い始め、オブジェクトをあるコンテキストから別のコンテキストへ関数を経由して渡すようになると、正当かつ重要な事項になるでしょう。

    Mozilla 開発者への注意点:
    XPCOM を用いるコードでは instanceof に特別な効果があります: obj instanceof xpcomInterface (例えば Components.interfaces.nsIFile) は obj.QueryInterface(xpcomInterface) を呼び出し、QueryInterface が成功した場合に true を返します。このような呼び出しの副作用として、instanceof による確認の成功後に objxpcomInterface のプロパティを利用できることがあります。標準 JavaScript の環境と異なり、obj が異なるスコープ由来であっても obj instanceof xpcomInterface での確認は期待どおりに動作します。

    例: StringDateObject タイプであることの実証

    以下のコードは、StringDate オブジェクトが Object タイプでもある (Object から派生している) ことの実証に instanceof を用いています。

    var myString = new String();
    var myDate = new Date();
    
    myString instanceof String; // true を返す
    myString instanceof Object; // true を返す
    myString instanceof Date;   // false を返す
    
    myDate instanceof Date;     // true を返す
    myDate instanceof Object;   // true を返す
    myDate instanceof String;   // false を返す
    

    例: mycarCar タイプおよび Object タイプであることの実証

    以下のコードは、Car オブジェクトタイプとそのインスタンスである mycar を生成しています。instanceof 演算子で、mycarCar タイプおよび Object タイプであることを実証します。

    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    
    var mycar = new Car("Honda", "Accord", 1998);
    var a = mycar instanceof Car;    // true を返す
    var b = mycar instanceof Object; // true を返す
    

    関連情報

    ドキュメントのタグと貢献者

    Contributors to this page: teoli, ethertank, yyss
    最終更新者: teoli,
    サイドバーを隠す