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,看看他们的价值是什么。
即: kal
, typeof kal
, typeof kal.KalmanModel
。 此外,我认为你需要创build一个KalmanModel
实例来使用原型函数,所以试试:
var KM = new kal.KalmanModel(x_0,P_0,F_k,Q_k);