prototype.Function不在node.js中导出

我发现这个JavaScript 卡尔曼filter库在线,我想用我的node.js应用程序。 正如我想包括这个js文件到我的node.js应用程序,我试图导出所需的function(添加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:对象不是一个函数。

它看起来像原型定义的方法没有得到出口。 我在这里做错了什么?

那么如果你不想在现有的源代码中改变很多,你可以这样做。 不要删除隐式函数调用ie: (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); 

我真的很难理解为什么最上面的一段代码是按原样写的(命名的属性与函数中的函数名称相同)

我的build议是注销一些variables,看看他们的价值是什么。

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

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