最終更新:2013-08-12 (月) 00:40:22 (3903d)
__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などにおける独自拡張
プロトタイプチェーン
- __proto__はプロトタイプオブジェクト?(プロパティが見つからなかったときに探索しに行くオブジェクト)
- 探索は__proto__の値がnullになるまで続く(__proto__ には null が入っているので, ここで探索は打ち切られる)
ブラウザ別
Code | Firefox | Google Chrome | Opera |
hasOwnProperty?(Object.prototype, "__proto__") | true | false | false |
"__proto__" in Object.prototype | true | true | true |
desc(Object.prototype, "__proto__") | [Object object] | undefined | undefined |
Object.prototype.__proto__ | null | null | null |
- Google Chrome, Opera では、in演算子が変。Prototypeがあろうが無かろうがtrueを返す
- http://d.hatena.ne.jp/teramako/20111231/protoProperty