prototype.Function没有在node.js中导出

时间:2015-06-18 16:02:53

标签: javascript node.js kalman-filter

我在网上找到了这个javascript Kalman filter library,我想在我的node.js应用程序中使用它。由于我想将这个js文件包含到我的node.js应用程序中,我尝试导出所需的函数(添加了module.exports,如下所示)。

module.exports = {

  KalmanModel : function(){

    function KalmanModel(x_0,P_0,F_k,Q_k){
      this.x_k  = x_0;
      this.P_k  = P_0;
      this.F_k  = F_k;
      this.Q_k  = Q_k;
    }

    KalmanModel.prototype.update =  function(o){
      // code 
    }

    return KalmanModel;
  },

  KalmanObservation : function(){

    function KalmanObservation(z_k,H_k,Q_k){
      this.z_k = z_k;//observation
      this.H_k = H_k;//observation model
      this.R_k = R_k;//observation noise covariance
    }

    return KalmanObservation;
  }
};

但是当我尝试运行以下代码时

代码:

var kal =require('./kalman');
var observationVal = observationValues;
var x_0 = $V([observationVal[0]]);
var P_0 = $M([[2]]);
var F_k=$M([[1]]);
//process noise
var Q_k=$M([[0]]);
var KM = kal.KalmanModel(x_0,P_0,F_k,Q_k);
//value we measure
var z_k = $V([observationVal[0]]);
var H_k = $M([[1]]);
var R_k = $M([[4.482]]);
var KO = kal.KalmanObservation(z_k,H_k,R_k);

for (var i=1;i<10;i++){
z_k = $V([observationVal[i]]);
KO.z_k=z_k;
KM.update(KO);

我收到错误

  

TypeError:object不是函数。

看起来用原型定义的方法没有被导出。我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

我真的很难理解为什么顶层代码按原样编写(命名属性与其中的函数匹配)

我的建议是注销一些变量以查看它们的价值。

即:kaltypeof kaltypeof kal.KalmanModel。另外,我认为你需要创建一个KalmanModel的实例来使用原型函数,所以试试:

var KM = new kal.KalmanModel(x_0,P_0,F_k,Q_k);

答案 1 :(得分:1)

如果你不想改变现有的源代码,你可以做到这一点。不要删除隐式函数调用,即(function(){//code})();,我认为你应该被设置。

module.exports = {

    KalmanModel : (function(){

        function KalmanModel(x_0,P_0,F_k,Q_k){
          this.x_k  = x_0;
          this.P_k  = P_0;
          this.F_k  = F_k;
          this.Q_k  = Q_k;
        }

        KalmanModel.prototype.update =  function(o){
          // code 
        }

        return KalmanModel;
    })(),

    KalmanObservation : (function(){

        function KalmanObservation(z_k,H_k,Q_k){
          this.z_k = z_k;//observation
          this.H_k = H_k;//observation model
          this.R_k = R_k;//observation noise covariance
        }

        return KalmanObservation;
    })()
};

或者只是将以下内容附加到库kalman.js

module.exports = {
    myKalmanModel : KalmanModel,
    myKalmanObservation : KalmanObservation
}

并以

进行访问
var KM = kal.myKalmanModel(x_0,P_0,F_k,Q_k);