在Node.js中调用Object.create(new EventEmitter)意味着什么?

我已经阅读了Object.create上的MDN文档 。 它只是指出了第一个参数是原型的场景。 不过,我已经看到了Node.js中的一些代码:

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

那么当第一个参数是一个对象时, Object.create()做什么?

Object.create的第一个参数总是原型,它总是一个对象。

在这种情况下,它只是意味着原型是通过new – 没有什么大不了的。 如果new (如它应该)返回一个新的对象,那么把它看作是一个一次性 (或“非共享”)的原型,将只用于新的Object.create'd对象。

按照标准规则, newbuild立的Object.create原型的[原型]也将成为链条的一部分。

请参阅MDN上的Object.create :

Object.create(proto [, propertiesObject ])

proto – 应该是新创build对象的原型的对象。

使用Object.create和new来创build几个实例可能会导致问题。 使用new创build一个可以(并且很可能)具有实例特定成员的对象。 如果您然后使用该对象来创build多个实例,您将在新创build的对象的原型上具有实例特定的成员。 原型是共享的,变异这些成员会改变它的所有实例。 如下面的例子与食物成员一起演示。

 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"]