【问题标题】:Export / Import ECMASCRIPT 6 Class with JSON使用 JSON 导出/导入 ECMASCRIPT 6 类
【发布时间】:2016-01-10 23:45:53
【问题描述】:

这都是使用 ecmascript 6;说我有课

class Hero {
    constructor(id,name){
        this.id=id;
        this.name=name;
    }
}

我想创建一个该类型的对象数组:

var HEROES = [
  { "id": 11, "name": "Mr. Nice" },
  { "id": 12, "name": "Narco" },
  { "id": 13, "name": "Bombasto" },
  { "id": 14, "name": "Celeritas" },
  { "id": 15, "name": "Magneta" },
  { "id": 16, "name": "RubberMan" },
  { "id": 17, "name": "Dynama" },
  { "id": 18, "name": "Dr IQ" },
  { "id": 19, "name": "Magma" },
  { "id": 20, "name": "Tornado" }
];

除了手动解析数组然后为每个元素执行 New Hero() 之外,还有其他方法吗?能够做类似HEROES[] = hero.jsonExport() 和稍后var = hero.jsonImport(HEROES[i]) 的事情会很好。我一直在环顾四周,但不使用 Typescript 这似乎并不容易。我错过了一些简单的事情吗? 谢谢! -埃里克

【问题讨论】:

  • 你在找HEROS.map(({id, name}) => new Hero(id, name))吗?
  • 在你的类中添加一个static fromJSON({id, name}) { return new this(id, name); }方法,然后使用HEROES.map(Hero.fromJSON)

标签: json ecmascript-6


【解决方案1】:

想要从特定的数组实例导入似乎很奇怪——尤其是考虑到顺序可能会改变。导出一个根据标准创建new Hero 的工厂函数可能会更好:

class Hero {
    constructor(id,name){
        this.id=id;
        this.name=name;
    }
}

const HEROES = [
  { "id": 11, "name": "Mr. Nice" },
  { "id": 12, "name": "Narco" },
  { "id": 13, "name": "Bombasto" },
  { "id": 14, "name": "Celeritas" },
  { "id": 15, "name": "Magneta" },
  { "id": 16, "name": "RubberMan" },
  { "id": 17, "name": "Dynama" },
  { "id": 18, "name": "Dr IQ" },
  { "id": 19, "name": "Magma" },
  { "id": 20, "name": "Tornado" }
];

export default function createHero(index) {
    const hero = HEROES[index];
    return new Hero(hero.id,hero.name);
}

和调用者:

import createHero from "./hero";
const hero1 = createHero(1);

【讨论】:

  • 谢谢,所以必须以迭代的方式一次一个地完成,然后正确吗?有没有办法让整个 HEROES 数组成为 Hero 对象数组?
  • @ehiller:嗯,你当然可以立即从const HEROES = [new Hero(11, "Mr. Nice"), new Hero(12, "Narco"), …] 开始,但你的问题需要JSON
猜你喜欢
  • 2016-04-28
  • 2019-07-24
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多