理解javascript继承和node.js util继承函数的例子

ken*_*ntz 10 javascript oop inheritance node.js

我有两个模块:apirequest.jsfeed.js. 当我打电话feed.start()apirequest,我得到的,TypeError: Object #<Feed> has no method 'start'.为什么是这样?不util.inherits(Feed, APIRequest);继承APIRequest的属性?

apirequest.js

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

function APIRequest(endpoint) { } 

APIRequest.prototype.start = function() { }

util.inherits(APIRequest, EventEmitter);

module.exports = APIRequest;
Run Code Online (Sandbox Code Playgroud)

feed.js

var util = require('util');
var APIRequest = require('../lib/api_request');

function Feed(endpoint) {
  APIRequest.call(this, endpoint);
}

util.inherits(Feed, APIRequest);

var feed = new Feed(endpoint);

feed.start();
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 13

问题是顺序:

APIRequest.prototype.start = function() { }
util.inherits(APIRequest, EventEmitter); <-- *overwrites* APIRequest.prototype
Run Code Online (Sandbox Code Playgroud)

如果你交换这些行,它将工作:

util.inherits(APIRequest, EventEmitter);
APIRequest.prototype.start = function() { }
Run Code Online (Sandbox Code Playgroud)