不能在javascript (node.js)中实例化对象

Can't instantiate object in javascript (node.js)

本文关键字:实例化 对象 js node javascript 不能      更新时间:2023-09-26

嗨,有人能告诉我为什么我不能实例化下面的类/对象吗?

function Arbitrage(odds1, odds2, investment)
{
    this.investment = investment;
    this.odds1 = odds1;
    this.odds2 = odds2;
    this.arbPercent = function() {
        return 1.0/this.odds1 + 1.0/this.odds2;
    };
    this.profit = function() {
        return this.investment / this.arbPercent() - this.investment;
    };
    this.individualBets = function() {
        return    {
                odds1bet : this.investment/this.odds1/this.arbPercent(),
                odds2bet : this.investment/this.odds2/this.arbPercent()    
            };
    };
};
module.exports = Arbitrage;

我这样调用它:

var utility = require('../businesslogic/utility');
...
router.post('/calculate', function(req, res)
    {
        var arbit = new utility.Arbitrage(req.body.odds1, req.body.odds2, req.body.investment);
        res.json({
            arbPercentage : arbit.arbPercent(),
            profit : arbit.Profit(),
            indvBets : arbit.individualBets()
        });
    });

第一行,var arbit = new utility.Arbitrage(...)抛出错误。上面写着TypeError: undefined is not a function

我已经检查了utility不是null或类似的东西。而且所有的构造函数参数都是正确的。

我不是很熟悉javascript,任何帮助将不胜感激。谢谢。

您正在直接导出Arbitrage类,因此在您需要它之后

var utility = require('../businesslogic/utility');

utility实际上是您的Arbitrage类,这意味着typeof utility === 'function' .

我有两种方法可以解决这个问题。

1。改变你要求Arbitrage类的方式:

var Arbitrage = require('../businesslogic/utility');
// ...
var arbit = new Arbitrage(...);

2。或者更改导出方式:

exports.Arbitrage = Arbitrage;

这是因为你导出它的方式

应该使用:

module.exports.Arbitrage = Arbitrage;

然后你可以像这样实例化:

var Arbitrage = require('../businesslogic/utility');
var varbitrage = new Arbitrage();