我想知道为什么应该在prototype method
后添加util.inherits
?
var util = require('util');
var EventEmitter = require('events').EventEmitter;
function Server() {
console.log('init');
}
Server.prototype.say = function(){
console.log('say');
}
util.inherits(Server, EventEmitter);
var server = new Server();
server.on('abc', function(){
console.log('abc');
})
server.emit('abc');
server.say();
运行此代码时出错:
C:\Users\elqstux\Desktop\wy.js:19
server.say();
^
TypeError: undefined is not a function
at Object.<anonymous> (C:\Users\elqstux\Desktop\wy.js:19:8)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
但如果我修改了代码:
util.inherits(Server, EventEmitter);
Server.prototype.say = function(){
console.log('say');
}
代码运行正常。
答案 0 :(得分:1)
来自node.js文档https://nodejs.org/docs/latest/api/util.html#util_util_inherits_constructor_superconstructor:
util.inherits(constructor,superConstructor)
将原型方法从一个构造函数继承到另一个构造函数。 构造函数的原型将设置为从superConstructor 创建的新对象。
所以基本上在服务器上使用util.inherits之后,它的原型被new替换,继承自EventEmitter,因此以前添加的方法都会丢失。