我正在使用 node.js 的 express 框架制作应用程序。我必须在我的应用程序中使用继承等OOP功能。
我在 routes / model 文件夹中创建了一个简单的类。
exports.Rectangle = function(x,y)
{
this.x = x;
this.y = y;
}
Rectangle.prototype.getArea = function()
{
return (this.x * this.y);
}
Rectangle.prototype.toString = function()
{
var tmp = "Rectangle " + this.x + " : " + this.y;
return tmp;
}
我的 routes / index.js 是这样的:
exports.index = function(req, res){
var RectangleClass = require('./model/Rectangle.js');
var rect1 = new RectangleClass.Rectangle(4,6);
console.log(rect1.getArea());
console.log("Rect: " + rect1);
res.send("hello");
};
当我运行应用程序时,我收到错误: 500 ReferenceError:未定义矩形 错误显示在routes / model / Rectangle.js中的Rectangle.prototype.getArea = function()行
但是,如果我在我的index.js文件中复制粘贴Rectangle类结构,那么一切正常。但我有很多类,我不想在一个文件中定义它们。如何引用其他文件中定义的对象?
答案 0 :(得分:1)
这是初始设置中的问题:
exports.Rectangle = function(x, y) {
...
}
Rectangle.prototype.getArea = ...
exports.Rectangle
无法在当前模块中神奇地创建名为Rectangle
的变量,因此当您尝试使用undefined
时会出现Rectangle.prototype
错误。
有几种解决方案:
// one solution
var Rectangle = exports.Rectangle = function(x, y) { ... }
Rectangle.prototype.getArea = ...
// another solution
var Rectangle = function(x, y) { ... }
Rectangle.prototype.getArea = ...
exports = Rectangle;
// yet another solution
exports.Rectangle = function(x, y) { ... }
exports.Rectangle.prototype.getArea = ...
或者你自己发现的那个,虽然创建这样的工厂功能并不是真的有必要:)
答案 1 :(得分:0)
这突然发生在我身上。我使用getter方法创建并返回一个Rectangle对象。在Rectangle.js中进行了以下更改。
exports.getRectangle = function(x,y)
{
var r = new Rectangle(x,y);
return r;
}
Rectangle = function(x,y)
{
this.x = x;
this.y = y;
}
其他方法保持不变。
在我的index.js文件中,而不是
var r = new RectangleClass.Rectangle(6,4);
我用过
var r = RectangleClass.getRectangle(6,4);