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

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

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));  
}
分享
微博
QQ
微信
回复
2024-10-08 16:26:51
相关问题
native侧如何使用静态方法
733浏览 • 1回复 待解决
Har如何导出ts方法
326浏览 • 1回复 待解决
如何在工具中获取Context
1888浏览 • 1回复 待解决
native侧如何调用静态方法
1033浏览 • 1回复 待解决
日志工具使用方法
306浏览 • 1回复 待解决
HarmonyOS如何获取一个名称
392浏览 • 2回复 待解决
ArkTS方法是否支持重载
2319浏览 • 1回复 待解决
http不支持cancel方法
68浏览 • 1回复 待解决
上下文工具方法有哪些?
216浏览 • 1回复 待解决
HarmonyOS 数据方法无法被调用
153浏览 • 1回复 待解决