我已阅读MDN document on Object.create。 它只指出了第一个参数是原型的情况。但是,我在Node.js中看到过这样的代码:
var events = require('events');
var emitter = new events.EventEmitter();
var a = Object.create(emitter);
那么Object.create()
第一个参数是一个对象时会做什么?
答案 0 :(得分:1)
Object.create
的第一个参数总是原型,总是一个对象。
在这种情况下,它只是意味着原型碰巧是通过new
创建的 - 没什么大不了的。如果new
确实(应该)返回 new 对象,那么将其视为一次性(或“非共享”)原型,只会用于新的Object.create'd对象。
根据标准规则,由new
建立的Object.create原型的[prototype]也将成为链的一部分。
Object.create(proto [, propertiesObject ])
proto
- 对象,它应该是新创建的对象的原型。
答案 1 :(得分:0)
将Object.create与new
一起使用来创建多个实例可能会导致问题。使用new
创建一个可以(并且很可能)具有特定于实例的成员的对象。如果然后使用该对象创建多个实例,则在新创建的对象的原型上将具有特定于实例的成员。原型是共享和变异的,这些成员将为所有实例改变它。如以下示例所示,与食品成员合作。
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"]