鸿蒙Next中class如何复制

在鸿蒙Next开发中,如何实现class的复制功能?比如我有一个自定义类,想创建它的副本并修改部分属性,但直接赋值会导致引用问题。求教正确的深拷贝实现方法或系统提供的拷贝接口?

2 回复

鸿蒙Next里复制class?简单!直接let newObj = Object.assign({}, oldObj)搞定!
或者用展开运算符:let newObj = { ...oldObj },更优雅~
注意深拷贝要用JSON.parse(JSON.stringify(obj)),但小心函数丢失哦!

更多关于鸿蒙Next中class如何复制的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,类的复制通常涉及深拷贝浅拷贝,具体取决于类的成员变量类型。以下是实现方法:

1. 浅拷贝

如果类只包含基本数据类型(如 intstring),直接复制对象即可:

class MyClass {
  name: string;
  value: number;

  constructor(name: string, value: number) {
    this.name = name;
    this.value = value;
  }
}

// 浅拷贝示例
const obj1 = new MyClass("test", 10);
const obj2 = { ...obj1 }; // 展开运算符浅拷贝

2. 深拷贝

如果类包含引用类型(如对象、数组),需手动实现深拷贝:

class ComplexClass {
  data: string[];
  config: { id: number };

  constructor(data: string[], config: { id: number }) {
    this.data = data;
    this.config = config;
  }

  // 自定义深拷贝方法
  deepCopy(): ComplexClass {
    return new ComplexClass(
      [...this.data], // 复制数组
      { ...this.config } // 复制对象
    );
  }
}

// 使用深拷贝
const original = new ComplexClass(["a", "b"], { id: 1 });
const copied = original.deepCopy();

3. 使用序列化(通用方法)

通过 JSON.parseJSON.stringify 实现深拷贝(适用于可序列化对象):

const deepCopy = <T>(obj: T): T => JSON.parse(JSON.stringify(obj));

注意事项:

  • 若类包含函数、Symbol 或不可序列化属性,序列化方法会丢失这些内容。
  • 对于嵌套结构复杂的对象,建议使用库(如 Lodash 的 _.cloneDeep)。

根据实际需求选择合适的方法,确保复制后的对象行为符合预期。

回到顶部