Cześć, czy ktoś może mi powiedzieć, dlaczego nie mogę utworzyć instancji następującej klasy / obiektu?

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;

Dzwonię do tego:

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()
        });
    });

Pierwsza linia, var arbit = new utility.Arbitrage(...) rzuca błąd. Mówi TypeError: undefined is not a function

Sprawdziłem, że utility nie jest null ani nic takiego. Również wszystkie argumenty konstruktora są w porządku.

Nie znam JavaScript, wszelka pomoc byłaby doceniona. Dzięki.

1
shek 17 sierpień 2014, 04:13

2 odpowiedzi

Najlepsza odpowiedź

Eksportujesz bezpośrednio klasy Arbitrage, więc po tym, jak to wymaga

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

utility jest w rzeczywistości klasa {x1}}, co oznacza, że typeof utility === 'function'.

Widzę dwa sposoby naprawy.

1. zmień sposób, w jaki wymagasz klasy Arbitrage:

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

2. lub zmień sposób eksportującej:

exports.Arbitrage = Arbitrage;
3
Leonid Beschastny 17 sierpień 2014, 00:20

To ze względu na sposób, w jaki go eksportowałeś

Powinieneś użyć :

module.exports.Arbitrage = Arbitrage;

A potem możesz zaszczepić takie:

var Arbitrage = require('../businesslogic/utility');
var varbitrage = new Arbitrage();
-1
floverdevel 17 sierpień 2014, 00:24