Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js中调用Object.create(neweventemitter)意味着什么_Javascript_Node.js_Object Create - Fatal编程技术网

Javascript 在Node.js中调用Object.create(neweventemitter)意味着什么

Javascript 在Node.js中调用Object.create(neweventemitter)意味着什么,javascript,node.js,object-create,Javascript,Node.js,Object Create,我读过这本书。 它只指出了第一个参数是原型时的场景。但是,我在Node.js中看到了如下代码: var events = require('events'); var emitter = new events.EventEmitter(); var a = Object.create(emitter); 那么当对象的第一个参数是对象时,Object.create()做什么呢 对象的第一个参数。create始终是原型,它始终是一个对象 在这种情况下,它只是意味着原型恰好是通过new创建的

我读过这本书。 它只指出了第一个参数是原型时的场景。但是,我在Node.js中看到了如下代码:

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

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

对象的第一个参数。create始终是原型,它始终是一个对象

在这种情况下,它只是意味着原型恰好是通过
new
创建的-没什么大不了的。如果
new
确实(应该)返回了一个新对象,则将其视为仅用于新对象的一次性(或“非共享”)原型。创建新对象

根据标准规则,由
new
建立的Object.create prototype的[prototype]也将是链的一部分

见:

Object.create(proto[,propertiesObject])

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


使用Object.create with
new
创建多个实例可能会导致问题。使用
new
创建一个对象,该对象可以(而且很可能)具有实例特定的成员。如果随后使用该对象创建多个实例,则新创建的对象的原型上将具有实例特定的成员。原型是共享的,对这些成员进行变异将对所有实例进行变异。如以下示例所示,请与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"]

所有原型都是对象。没有区别-它只是做同样的事情。那么a和发射器之间的关系是什么呢?他们彼此不同吗?我试图让发射器监听名为“hello”的事件,并让a发出“hello”事件,发射器可以捕捉到它。@LASkuma它与任何原型的关系都是一样的。“问题”是“newevents.EventEmitter()返回什么?”这与这里的问题不同。@user2864740有点混淆。您的意思是“a”属于EventEmitter的子类,因为emitter是EventEmitter类的实例吗?不,它有一个指向
emitter
的指针。它是一个新的、独特的对象,可以有自己的属性(隐藏继承的属性)。你能试试我在你的节点回复中引用的代码吗?我只是想弄清楚到底发生了什么。@LASkuma只有一种情况。原型是一个对象。如果它是
new
'd(并且没有
return sharedInstance
欺骗),那么它仅仅是一个一次性(或“非共享”)的原型对象-该对象也可以通过一个新的
{}
表达式创建,或者它可以隐藏在构造函数后面(正常应用它自己的[prototype]),就像这种情况一样。所有规则都没有改变。