最終更新:2013-08-12 (月) 00:40:22 (1946d)  

__proto__ はてなブックマークを見る
Top / __proto__

プロトタイプとして使用しているオブジェクトへのポインタ。Mozillaの独自拡張。

https://developer.mozilla.org/ja/docs/JavaScript/Reference/Global_Objects/Object/proto

ECMA-262 5th Edition

  • Object.getPrototypeOf? - 同じ働きをするメソッド(公式規格)

ポイント

  • Object.prototype__proto__は別物
  • オブジェクトを new するとき, コンストラクタ関数prototype プロパティが指しているオブジェクトが, 生成されるオブジェクトの __proto__ に代入される
    var a = new Object; // または var a = { };
    a.prototype   ==  null;                    //=> true
    a.__proto__   !== a.prototype;             //=> true
    a.__proto__   === Object.prototype;        //=> true
    
    // constructor はプロトタイプチェーンで取得しているだけ
    a.constructor === Object; //=> true
    //
    a.hasOwnProperty("constructor");  //=> false
  • プロトタイプチェーン__proto__プロパティで実現されている
  • Firefoxなどにおける独自拡張
    • ECMA仕様として明示されているわけではないし、IEOperaではこのプロパティにはアクセスできない

プロトタイプチェーン

  • __proto__プロトタイプオブジェクト?(プロパティが見つからなかったときに探索しに行くオブジェクト)
  • 探索は__proto__の値がnullになるまで続く(__proto__ には null が入っているので, ここで探索は打ち切られる)

ブラウザ別

CodeFirefoxGoogle ChromeOpera
hasOwnProperty?(Object.prototype, "__proto__")truefalsefalse
"__proto__" in Object.prototypetruetruetrue
desc(Object.prototype, "__proto__")[Object object]undefinedundefined
Object.prototype.__proto__nullnullnull

関連

参考