3

こんにちは、JavaScriptでこの2つのオブジェクトがあります

var john = { firstname: 'John', lastname: 'Smith' }

var jane = { firstname: 'Jane' }

これを行う:

jane.__proto__ = john;

ジェーンのプロパティとジョンのプロパティにアクセスできます

__proto__たとえば、 が IE8 でサポートされていない場合、次のように書くのと同じことは何ですか?

jane.__proto__ = john;

ありがとう!

4

2 に答える 2

9

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
于 2012-09-14T21:04:06.420 に答える