什么是事件发射器呼叫?

Ext*_*ken 4 javascript prototypal-inheritance node.js

我正在学习Node Js.我在书中遇到了一段代码,说明如下:

var EventEmitter = require("events").EventEmitter;
var inherits = require('util').inherits;

//Custom class
function Foo(){
   EventEmitter.call(this);
}
inherits(Foo, EventEmitter);

Foo.prototype.connect = function(){
    this.emit('connected');
}

var foo = new Foo();
foo.on('connected', function(){
    console.log("connected raised!');
}

foo.connect();
Run Code Online (Sandbox Code Playgroud)

我的问题是这里的"召唤"是什么?为什么类Foo继承自EventEmitter?这是否意味着Foo是Event Emitter的孩子?如果是这样,它必须是EventEmitter的孩子吗?我在Stackoverflow中发现了另一个关于调用的问题(EventEmitter.call()做了什么?)但是,我不明白提供的答案...谢谢

代码来源:Basarat Ali Syed的Beginning Node.js

jfr*_*d00 6

代码行:

EventEmitter.call(this);
Run Code Online (Sandbox Code Playgroud)

调用您继承的对象的构造函数,该构造函数允许EventEmitter代码初始化此对象的一部分,该部分是Javascript中继承过程的一部分.

EventEmitter()是EventEmitter对象的构造函数.由于您需要使用与this新对象相同的方法调用该构造函数,因此必须使用该构造函数.call().apply()使用该构造函数才能this使用正确的构造函数.由于没有参数传递给构造函数,.call()因此调用它是最简单的方法.

您必须调用EventEmitter()构造函数,以便允许它正确初始化其创建的对象部分new Foo().在Javascript中使用继承时,多个单独的对象定义使用相同的对象来存储它们的属性和方法,因此每个对象都初始化它们的对象部分,并通过调用从中继承的对象的构造函数来启动初始化.

这是关于链接构造函数主题的一个很好的参考.


从您的一些评论中可以看出,您不明白代码中的继承点是什么.该代码允许您创建一个对象类型Foo,其上有自己的方法,但该对象也是一个eventEmitter,具有EventEmitter的所有功能,可以触发事件,响应事件等......这个叫做"继承",您使用自己的自定义对象继承其他对象的功能.为了使继承有效,您的代码会做两件事.使用inherits(Foo, EventEmitter);代码行,它继承了另一个对象的原型,以便它具有所有可用的相同方法EventEmitter.call(this);,并且调用继承对象的构造函数,以便对象可以正确初始化自身.

您可能想阅读有关Javascript继承的几篇参考文章:

面向对象的JavaScript简介

继承和原型链

理解JavaScript继承

什么是Javascript中的"继承"?

继承:面向对象的编程