首页 > 解决方案 > 从 JSON 文件预加载自定义对象

问题描述

我在 javascript (Vector) 中有一个自定义原型函数。这些实例作为属性存储在一个包含大约 100 万个对象的大数组 (allTiles) 中的对象(图块)中。

我有一个漫长而复杂的过程来创建和填充它 - 运行大约需要 20 分钟。但是结果是静态的,我想从静态 JSON 文件中预加载它们以绕过生成过程。

过去我可以使用 JSON.stringify 执行此操作,并将结果存储在单独的 js 文件中。然而,这对本机数据类型比对自定义函数更有效。当我在这种情况下这样做时,我得到一个 localVector 被表示为具有正确值的对象 - 但不是作为 Vector 的实例(及其所有可用方法等)。

我将不胜感激有关如何构造静态 JSON 文件的任何指针,在该文件中我可以获得与从此类代码中获得的相同结果(假设向量函数和原型当然会在执行此文件中的代码之前加载)。

注意 - 我有一个 hacky 解决方法,我不喜欢从 JSON 创建然后迭代列表并手动将对象转换为向量 - 这比从头开始生成要快得多,但仍然很慢,我假设/希望有一个更正确的做法。

生成代码的起始位置:

//simple version of complex generation process
let allTiles = [];
let tile1 = {ID:abc, localVector : new Vector(x, y)};
allTiles.push(tile1);
//....repeat a million times 
//from this position code like this works fine: 
allTiles[0].localVector.add(anotherVector)

矢量原型。

function Vector(x, y) {
    this.x = x || 0;
    this.y = y || 0;
}

Vector.prototype = {
    set: function (x, y) {
        this.x = x || 0;
        this.y = y || 0;
        return this;
    },

    add: function (v) {
        this.x += v.x;
        this.y += v.y;
        return this;
    }
}

标签: javascriptarraysobjectprototype

解决方案


推荐阅读