javascript - 在将 JSON 分配给类对象后,该类的本地函数已损坏
问题描述
这是我的班级对象书是父母并且有一个孩子
export class Book
{
name: String;
auther: String;
series: String;
pricedeatils: Array<price>;
}
// 这是子类
export class price
{
price1: Number;
price2: Number;
price3: Number;
price4: Number;
price5: Number;
price6: Number;
price7: Number;
public setPrice( lcol:number,lnprice:number)
{
this["price"+ lcol]= lnprice:
}
}
我通过 api 接收
this.http.get(this.booksUrl)
.subscribe(res => console.log(res));
我的 json 文件看起来像这样
{
"name": "Apple",
"auther": "Shaik",
"series": "Classic"
"pricedeatils": [
{
"price1": 1,
"price2": 2,
"price3": 3,
"price4": 4,
"price5": 7,
"price6": 10,
"price7": 8,
},
{
"price1": 11,
"price2": 22,
"price3": 23,
"price4": 34,
"price5": 37,
"price6": 10,
"price7": 38,
},
{
"price1": 31,
"price2": 33,
"price3": 24,
"price4": 34,
"price5": 37,
"price6": 10,
"price7": 38,
},
],
}
收到 json 后,我无法调用类本地函数。
this.Book.pricedeatils[0].setobj(1, 15)
出现这样的错误 core.js:12301 ERROR 错误:未捕获(在承诺中):TypeError:this.Book.priceeutils[0].setobj is not a function
解决方案
您从服务器收到的 JSON 使用JSON.parse
方法转换为对象。JSON.parse 的输出始终是数组、对象、数字或字符串(直到未使用reviver 参数)。它不是您的类的实例Book
或price
.
我过去也遇到过同样的问题,我通过为我的类创建一个复制构造函数并将从服务器接收到的值传递给它来解决它,如下所示
export class price
{
constructor(source: price){
this.price1 = source.price1;
this.price2 = source.price2;
this.price3 = source.price3;
this.price4 = source.price4;
this.price5 = source.price5;
this.price6 = source.price6;
this.price7 = source.price7;
}
price1: Number;
price2: Number;
price3: Number;
price4: Number;
price5: Number;
price6: Number;
price7: Number;
public setPrice( lcol:number,lnprice:number)
{
this["price"+ lcol]= lnprice:
}
}
和
export class Book
{
constructor(source: price){
this.name= source.name;
this.auther= source.auther;
this.series= source.series;
this.pricedeatils= source.pricedeatils && source.pricedeatils.map(a=>new price(a));
}
name: String;
auther: String;
series: String;
pricedeatils: Array<price>;
}
并将其用作
this.http.get(this.booksUrl).pipe(map(a => new Book(a))).subscribe(res => console.log(res));
推荐阅读
- azure-active-directory - 有没有办法通过 Graph API 获取 Office365 的服务运行状况和信息?
- kubernetes - Kubernetes 上的 Envoy 代理提供 503
- curl - curl不解压deflate页面
- jenkins - 在 Jenkins 中抑制 Simpletest JUnit XML 输出中的警告
- sql - New-AzSqlDatabaseInstanceFailoverGroup 交叉订阅设置失败
- swift - 为什么 NSLocalizedString 在同一个文件中生成“使用未声明的类型”?
- powershell - PowerShell 2.0 中的时差
- java - 无法安装由 GluonHQ JavaFX 创建的 JavaFX Android 应用程序 - 为什么?
- python - 从 dtype 唯一编号到数据类型类
- python-3.x - 在 Windows 10 上的任务计划程序中计划并手动运行 .pyw 脚本