javascript - Node.js 模块的继承

标签 javascript node.js inheritance

我在 Node.js 中的继承方面遇到问题。我遵循 stackoverflows 现有线程的模式,但我的代码仍然无法正常工作。

让我们从两个项目开始,第一个是“base.js”:

function Base() {
    this.type = 'empty';
}

Base.prototype.getType = function () {
    return this.type;
}

module.exports = Base;

然后我有我的“second.js”文件,它应该继承自 Base

var Base = require('./base.js'), util = require('util');

function Second() {
    Base.apply(this, arguments);
}

util.inherits(Second, Base);


Second.prototype.getData = function () {
    return 12;
}

module.exports = Second;

在我的 app.js 中,我调用

var second = new require('./second.js');
console.log(second.getType());

这会引发错误“getType 未定义”。但是,当我将所有这些放在一个文件(例如 app.js)中时,一切都正常。你能指出我的代码有什么问题或者建议更好的方法吗?

谢谢!

最佳答案

在你的 app.js 中,你需要首先需要构造函数,然后构造新实例:

var Second = require('./second.js');
var second = new Second();

console.log(second.getType());

或者你也可以这样做:

var second = new (require('./second.js'));
console.log(second.getType());

但无论如何,您需要先 require 并且仅在 apply new 运算符之后。它与operator precedence有关, new 运算符具有非常高的优先级。

关于javascript - Node.js 模块的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31490343/

相关文章:

node.js - 根据条件从现有字段计算分数

vim - Express.js、Node.js Jade vim

c++ - 模板特化和继承

python - 在多重继承的情况下, super 方法如何在 python 中工作?

javascript - 如何正确地将空映射设置为已解析的 json(这是一个新映射)?

javascript - 如何使用 sinon 模块模拟 axios 请求

javascript - 使用 Node.js 和 CoffeeScript 的 console.log 和函数执行

java - 未定义的构造函数(java)

javascript - CSS HTML - DIV高度填充剩余空间

javascript - 在 sweet Alert 中运行 jquery