我让模特这样说:
export default class UserObject
{
name: string;
id: string;
validateInsert()
{
}
}
如果我这样做:
const modelUser: UserModel = new UserModel();
modelUser.ID = 1;
modelUser.Name = "Ibrahim Aziz";
modelUser.validateInsert();
一切正常,但如果我这样做:
modelUser = JSON.parse(stringJSONUser);
modelUser.validateInsert();
我将收到错误消息,表明验证插入不是函数,似乎JSON解析仅传递值,甚至不自行初始化对象,知道吗?。
答案 0 :(得分:2)
JSON.parse用于将有效的JSON字符串数据转换为JSON对象。它将不会将功能转换为JSON对象中的正常JavaScript功能。
请查看此链接以获取更多详细信息。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
此外,如果您在具有一个或多个功能的现有对象上应用/调用此功能。它将用字符串来替换对象。
答案 1 :(得分:2)
您可以看一下这个问题: Parse JSON String into a Particular Object Prototype in JavaScript,其中接受的答案建议使用:
Object.assign(new Foo, { a: 1 })
Object.setPrototypeOf({ a: 1 }, Foo.prototype)
答案 2 :(得分:1)
您可能想访问json.org,它对JSON的内容进行了非常紧凑的描述。
简而言之:
“功能”不在列表中,JSON中没有功能。
您将需要一种变通方法,也许是another answer的建议或其他方法。
<html>
<head></head>
<body></body>
</html>
JSON.parse
也有一个可选的第二个参数,它可以对从JSON恢复的所有“事物”进行转换。在上面示例的“ correctUser”部分中,将检查每个“事物”是否是对象,如果它是对象,则将其“投射”到UserObject并因此获得缺少的功能(尽管至少就我所知,JavaScript Object.assign
使创建合适的对象并填充其字段变得简单,我认为您也需要在TypeScript中做同样的事情,因为type assertions说它们实际上并没有这样做物体的任何东西)。
问题在于这里每个对象都将是UserObject,因此,如果您有多个类,则必须以某种方式区分它们(也许通过检查它们具有的字段),并相应地创建替换对象。 / p>