繁体   English   中英

在Node.js中调用Object.create(new EventEmitter)是什么意思

[英]What does it mean to call Object.create(new EventEmitter) in Node.js

我已经阅读了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创建的Object.create原型的[prototype]也将成为链的一部分。

参见MDN上的Object.create

Object.create(proto [, propertiesObject ])

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM