用于存储网格数据的javascript对象

时间:2013-06-29 19:13:19

标签: javascript

我正在尝试存储一些用于绘图的网格数据(单元格大小和坐标)。

我是纯粹的新手,所以我遇到了一些困难。

现在我按照这样计算:

  var W = document.width;
  var H = document.height;

  var w = [80, null, 80, 100];
  w[1] = W - w[0] - w[2] - w[3];
  var x = [0, w[0], w[0] + w[1], w[0] + w[1] + w[2], w[0] + w[1] + w[2] + w[3]];

  var h = [null, 20, 100];
  h[0] = H - w[1] - w[2];
  var y = [0, h[0], h[0] + h[1]];

但这很难看。

我想将数据存储到某个对象中,并访问如下字段:

var grid = new Grid ([80, null, 80, 100], [null, 20, 100]);
// 'null' means that value shall be recalculated on window resized
var x1 = grid.x[1];
var w1 = grid.w[1];
// etc ..
// plus, somewhere inside Grid: window.addEventListener('resize', .... )

我想这个问题已经解决了很多次(但是我找不到),而且我不想“发明自行车”。

你能建议任何解决方案吗? ..或者可能链接到相应的文章?

1 个答案:

答案 0 :(得分:1)

首先:你的英语很好。这个问题很容易理解。

现在,对于实际问题:看起来你想要一个。 JavaScript类很有趣。有很多关于如何用JavaScript编写类的文档。特别是,我建议您查看herehere(严格来说不是类,但仍然有很多好的信息)和here (shameless self-plug)

在课堂上,您可以使用Object.defineProperty来执行以下操作:

Object.defineProperty(Grid.prototype, 'x', {
    'get': function() {
        /* do some calculations */
        return value;
    }
};

// later on
var x = myGrid.x;

或者,您可以使用沼泽标准功能:

Grid.prototype.x = function() {
    /* do some calculations */
    return value;
}

// later on
var x = myGrid.x();

就调整大小而言,通过将事件监听器附加到resize事件,您肯定是在正确的轨道上。我建议使用jQuery;从长远来看,它会有所帮助。您的代码看起来像:

$(window).on('resize', function(event) {
    /* loop over values */
    /* if value is null, recalculate */
});