1

Object.createの MDN ドキュメントを読みました。最初の引数がプロトタイプである場合のシナリオのみを指摘しました。ただし、次のような Node.js のコードを見たことがあります。

var events = require('events');  
var emitter = new events.EventEmitter();  
var a = Object.create(emitter);

ではObject.create()、最初の引数がオブジェクトの場合はどうするのでしょうか?

4

2 に答える 2

1

の最初のパラメータObject.create常にプロトタイプで、これは常にオブジェクトです。

この場合、それはプロトタイプがたまたま経由で作成されたことを意味しますnew-大したことではありません。もし(本来あるべきように)新しいオブジェクトをnew返す場合、それは、新しい Object.create されたオブジェクトにのみ使用される1 回限りの(または「共有されていない」) プロトタイプと考えてください。

によって確立された Object.create プロトタイプの [prototype]newも、標準ルールに従ってチェーンの一部になります。

MDN の Object.create を参照してください:

Object.create(proto [, propertiesObject ])

proto-新しく作成されたオブジェクトのプロトタイプとなるオブジェクト

于 2014-02-12T22:19:20.423 に答える
0

Object.create を使用しnewて複数のインスタンスを作成すると、問題が発生する可能性があります。Usingnewは、インスタンス固有のメンバーを持つことができる (そしてほとんどの場合) オブジェクトを作成します。次に、そのオブジェクトを使用して複数のインスタンスを作成すると、新しく作成されたオブジェクトのプロトタイプにインスタンス固有のメンバーが作成されます。プロトタイプは共有されており、これらのメンバーを変更すると、すべてのインスタンスが変更されます。次の例が food メンバーで示すように。

var Person = function(){
  this.food=[];//every person has food
      // this should be instance specific
};
Person.prototype.eat = function(foodItem){
  this.food.push(foodItem);
};
var proto = Object.create(new Person());
var bob = Object.create(proto);
var ben = Object.create(proto);
bob.eat("Eggs");
console.log(ben.food);//=["Eggs"]
于 2014-02-13T00:34:30.150 に答える