为什么在`util.inherits`之后应该添加添加的原型方法?

时间:2015-05-15 07:40:11

标签: javascript node.js

我想知道为什么应该在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');
}

代码运行正常。

1 个答案:

答案 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,因此以前添加的方法都会丢失。