无法在javascript(node.js)中实例化对象

时间:2014-08-17 00:13:39

标签: javascript node.js

您可以告诉我为什么我无法实例化以下类/对象吗?

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不是很熟悉,任何帮助都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:3)

您正在直接导出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;

答案 1 :(得分:-1)

这是因为你导出它的方式

你应该使用:

module.exports.Arbitrage = Arbitrage;

然后你可以像这样实现:

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