【问题标题】:Unable to cast object to class in JavaScript ES6无法在 JavaScript ES6 中将对象转换为类
【发布时间】:2015-11-27 16:26:19
【问题描述】:

我正在创建一个要向其中添加自定义类对象的地图,

var member_map = {};
var memberAction = new MemberActions(members.data[i].id, members.data[i].name);
member_map[memberAction.id] = memberAction;

现在,当我尝试使用 ID 从地图中取回 MemberActions 对象时,我得到的是 Object 而不是 MemberActions 对象。

var memberAction = member_map[fetch_id];

如何投射对象?

编辑: 我的班级定义:

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

【问题讨论】:

  • 这是使用新的 ES6 类语法吗?
  • 是否有其他代码与 member_map 交互?它是保存到 JSON 还是什么的?
  • member_map 是否曾经存储为文本,也许是 JSON?仅凭您在此处提供的内容,您所描述的内容不应该发生–jsfiddle.net/8tyec8dm。但是,JSON 没有自定义类型的概念。
  • 我只是在实例化一个类实例并存储在地图中
  • @AadiDroid:您能否发布一个完整的示例(例如,包括membersfetch_id)?我们无法重现您的问题。另外,你如何执行 ES6,是否涉及转译?还有,你是怎么确定你找回的对象不再是MemberAction了?

标签: javascript ecmascript-6 javascript-objects


【解决方案1】:

JS 没有对象转换之类的东西。

当你说你有一个对象时,这可能意味着当你尝试console.log(memberAction) 时,你会被告知它是一个对象——但这并不意味着它不是一个 MemberActions 对象。

要检查它的名称,请尝试:

console.log(memberAction.constructor.name)

memberAction.constructor 还应该包含您定义的构造函数。

【讨论】:

  • memberAction 是一个实例,没有.prototype
  • 哎呀!对不起,我的意思是constructor!已编辑。
  • 嗯,使用.constructor.name 仍然不是最佳实践。你宁愿使用instanceof。此外,console.log 通常非常擅长确定对象具有哪种自定义“类”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2020-08-04
  • 2019-12-11
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多