IE には同等または標準のメカニズムはありません。( __proto__
Firefox のプロパティは、ECMAScript 標準で指定されていないため、非標準の拡張機能です。)
[[prototype]] オブジェクトは、新しいオブジェクトの構築前にコンストラクターとして機能する関数オブジェクトにプロパティを設定することによってのみ指定できます。ただし、[[prototype]] は後で変更できます。prototype
とにかく、これは既存のオブジェクトから [[prototype]] を指定する小さな例です。[[prototype]] 割り当ては、新しいオブジェクトを作成する前に行う必要があることに注意してください。ECMAScript 第 5 版ではObject.createが導入されました。これにより、次のことが可能になり、オブジェクトの浅いクローンが作成されます。
function create (proto) {
function f () {}
f.prototype = proto
return new f
}
var joe = create({})
var jane = create(joe)
joe.name = "joe" // modifies object used as jane's [[prototype]]
jane.constructor.prototype === joe // true
jane.__proto__ === joe // true -- in Firefox, but not IE
jane.name // "joe" -- through [[prototype]]
jane.constructor.prototype = {} // does NOT re-assign jane's [[prototype]]
jane.name // "joe" -- see above