在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对象。
按照标准规则, new
build立的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"]