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
代码行:
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继承的几篇参考文章:
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |