Javascript Worker 丢失属性

标签 javascript prototype cluster-analysis web-worker

我正在开发一个网络应用程序,它可以在 map 上显示集群闪电事件(因此一个巨大的集群就像雷暴形成)。

为了避免“卡住”用户界面,我使用 Javascript Worker 来执行集群。当算法完成时,问题就会发生,因为它返回一个自定义对象,在我将其发送到主页后,该对象“丢失”了一些属性:

//inside Worker.js
var cluster = new DBSCAN(e.data.params).run();
self.postMessage({"cluster": cluster});

cluster 对象基本上是 GeoPoint 对象的数组,因此:

cluster[0]

是一个像这样的 GeoPoint 对象

function GeoPoint(lat, lng){
    this.lat_ = lat;
    this.lng_ = lng;
}
GeoPoint.prototype.lat = function(){ return this.lat_;}
GeoPoint.prototype.lng = function(){ return this.lng_;}

当我使用 self.postMessage 发送此对象时,我丢失了 lat()lng() 函数,需要绘制多边形。不过,lat_lng_ 属性完好无损。

我可以做什么来克服这个问题?现在我只是简单地循环结果并重建 GeoPoint 对象,它可以工作,但看起来很糟糕。

感谢您的建议!

编辑:我需要这些函数,因为绘图代码将在计算凸包之前对经纬度点执行排序。

最佳答案

What can i do to overcome this?

什么都没有 - cloning algorithm postMessage 使用的不传输原型(prototype)和函数。在另一侧重建它们是必要的。

Right now i'm simply looping over the results and reconstructing the GeoPoint objects, it works but seems very bad.

不,这就是需要做的:

var newCluster = messageData.cluster.map(function(likeapoint) {
    var point = new GeoPoint();
    for (p in likeapoint)        // maybe a static list of copied property names
        point[p] = likeapoint[p];// is faster, but not as flexible
    return point;
})

// since all properties are settable as arguments in this specific case:
var newCluster = messageData.cluster.map(function(likeapoint) {
    return new GeoPoint(likeapoint.lat_, likeapoint.long_);
})

关于Javascript Worker 丢失属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21408985/

相关文章:

javascript - D3js 随时间绘制?

javascript - Ember 不会破坏 View

perl - 函数声明 "sub function($$)"是什么意思?

javascript - Object.create 不创建属性

python - 从社区共现矩阵到每个节点的社区索引

python 用协方差最小的高斯混合模型(GMM)拟合加权数据

php - 在 jQuery 中使用 GET 和 POST

javascript - 从 Google 折线图中获取资源管理器值

javascript - 动态添加的 HTML 中的原型(prototype) Ajax.Autocompleter 不起作用

python - 使用 python 和 DBSCAN 聚类高维数据