如何在不修改类,不继承类的情况下为类添加方法?

如何在不修改类,不继承类的情况下为类添加方法?

HarmonyOS
2024-10-08 13:07:26
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

使用自定义assign,组合两个对象添加方法。

demo:

function assign(target: Record<string, Object>, ...source: Object[]): Record<string, Object> {  
  for (const items of source) {  
    for (const key of Object.keys(items)) {  
      target[key] = Reflect.get(items, key)  
    }  
  }  
  return target;  
}  
  
interface IMergeSub {  
  testString: string,  
  testObject?: IMergeSub,  
  testArray?: Array<number>  
}  
  
interface IMerge {  
  a: IMergeSub,  
  b: IMergeSub[],  
  c: string[],  
  d: number  
}  
  
export function testAssign() {  
  let objectOne: IMerge =  
    {  
      a: {  
        testString: 'objectOne-a-testString',  
        testObject: {  
          testString: 'objectOne-a-testObject-testString'  
        },  
        testArray: [1]  
      },  
      b: [{  
        testString: 'objectOne-b-testString',  
        testObject: {  
          testString: 'objectOne-b-testObject-testString'  
        },  
        testArray: [2]  
      }],  
      c: ['objectOne-c'],  
      d: 3  
    }  
  
  let objectTwo: Record<string, Object> = {  
    'a': 'objectTwo-a',  
    'c': ['objectTwo-c'],  
    'e': 1  
  }  
  
  let objectThree: Record<string, Object> = {  
    'f': ['objectThree-f']  
  }  
  
  // 合并多个对象,ObjectOne和ObjectTwo的属性都将附加到ObjectThree上,属性名相同时入参下标靠后的对象属性覆盖前面的对象属性  
  const multiObjectMerged = assign(objectThree, objectTwo, objectOne);  
  console.log('multiObjectMerged is:' + JSON.stringify(multiObjectMerged));  
  console.log('objectThree is:' + JSON.stringify(objectThree));  
  
  // 合并ObjectOne的属性到ObjectTwo,ObjectTwo的值会改变,属性名称相同时ObjectOne会覆盖ObjectTwo的属性  
  const objectMerged = assign(objectTwo, objectOne);  
  console.log('objectTwo is:' + JSON.stringify(objectTwo));  
  console.log('objectMerged is:' + JSON.stringify(objectMerged));  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
分享
微博
QQ
微信
回复
2024-10-08 16:26:51
相关问题
ArkTS中继承机制是怎样?
1213浏览 • 1回复 待解决
HarmonyOS 可以被继承并重写吗
863浏览 • 1回复 待解决
native侧如何调用静态方法
1675浏览 • 1回复 待解决
native侧如何使用静态方法
1351浏览 • 1回复 待解决
Har如何导出ts方法
854浏览 • 1回复 待解决
如何在工具中获取Context
2894浏览 • 1回复 待解决
日志工具使用方法
1267浏览 • 1回复 待解决
HarmonyOS如何获取一个名称
1988浏览 • 4回复 待解决
HarmonyOS 实体如何重写toString方法
634浏览 • 1回复 待解决