HarmonyOS class对象赋值,打开局部方法会报错?

class ClassA{
  func(){
    console.log("aaaa   this is func")
  }
}

@Entry
@Component
struct OutWareSettingPage {

  aboutToAppear(): void {

    let a:ClassA = new ClassA();
    a.func()
    let jsonA = JSON.stringify(a)
    console.log("aaaa   jsonA=" + jsonA)
    let a2:ClassA = JSON.parse(jsonA)
    a2.func()

  }
  build() {

  }
}

新new出来的对象ClassA的实例a可以调用局部方法func(),不会报错。但是如果把实例a序列化成json字符串,然后再把这个json字符串转换回对象实例,并赋值给a2。这个时候调用a2.func(),会报错。个人感觉是这个func()函数在a2这个实例里面不存在了。。。正常来说,把对象重新赋值是比较常见的做法,如果重新赋值就不能用里面的局部方法了,会不会不太友好。

阅读 527
1 个回答

JSON.parse() 方法返回的是一个普通对象,而不是 DataBean 类的实例。不包含类定义的任何方法。需要在将 JSON 数据转换为 DataBean 实例时,手动创建类的实例,并将 JSON 对象的属性赋值给类的实例。参考

class DataBean {
  code = -1;
  msg = '';

  isOK() {
    return this.code === 0;
  }

  // 静态方法,从 JSON 字符串创建 DataBean 实例
  static fromJson(jsonString: string): DataBean {
    const jsonData: ESObject = JSON.parse(jsonString);
    const dataBean = new DataBean();
    dataBean.code = jsonData.code;
    dataBean.msg = jsonData.msg;
    return dataBean;
  }
}
logo
HarmonyOS
子站问答
访问
宣传栏