首页 > 其他分享 >鸿蒙应用示例:应用开发中的动态获取属性与调用方法技巧

鸿蒙应用示例:应用开发中的动态获取属性与调用方法技巧

时间:2024-10-03 18:20:55浏览次数:11  
标签:info console name 鸿蒙 示例 person 应用 action new

随着HarmonyOS的发展,API版本的更新带来了许多新的特性和限制。在API 11及以后的版本中,直接赋值对象的语法不再被支持,这要求开发者们采用新的方式来处理对象的创建和属性的访问。同时,HarmonyOS支持ETS(Enhanced TypeScript)文件,这是一种扩展了TypeScript的文件格式,用于更好地支持HarmonyOS的特性。然而,ETS文件并不支持所有的TypeScript语法特性,这就需要开发者灵活运用不同的文件格式来实现所需的功能。

【完整示例】

src/main/ets/common/FactoryUtil.ts

export function createInstance<T>(constructor: new () => T): T {
  return new constructor();
}

src/main/ets/pages/Index.ets

import { createInstance } from '../common/FactoryUtil.ts';

class Person {
  name: string = '张三';
}

class Person2 {
  name: string = '李四';
}

function sum(a: number, b: number) {
  console.info(`${a} + ${b} = ${a + b}`);
}

function subtract(a: number, b: number) {
  console.info(`${a} - ${b} = ${a - b}`);
}

function printString(str: string) {
  console.info(str);
}

class BirthInfo {
  birthDate: string = "2020-02-03";
}

class UserInfo {
  userName: string = '';
  birthInfo?: BirthInfo = new BirthInfo();
  calculateAge = (): number | string => {
    if (!this.birthInfo) {
      return '数据异常';
    }
    const today = new Date();
    const birthDate = new Date(this.birthInfo.birthDate);
    const age = today.getFullYear() - birthDate.getFullYear();
    return age;
  };
}

class Action {
  description: string;
  action: Function;

  constructor(description: string, action: Function) {
    this.description = description;
    this.action = action;
  }
}

@Entry
@Component
struct MainPage {
  @State actions: Action[] = [
    new Action('加法计算', sum),
    new Action('减法计算', subtract),
    new Action('打印字符串', printString),
  ];

  build() {
    Column({ space: 10 }) {
      Button('创建对象并获取属性').onClick(() => {
        const person: object = Object({ name: '张三', age: 30 });
        console.info(`person['name']:${person['name']}`);
        console.info(`person['age']:${person['age']}`);
      });

      Button('执行动作').onClick(() => {
        this.actions.forEach(action => {
          if (action.description.includes('加法')) {
            action.action(1, 2);
          } else if (action.description.includes('减法')) {
            action.action(1, 2);
          } else if (action.description.includes('打印')) {
            action.action('Hello World');
          }
        });
      });

      Button('从TS文件创建实例').onClick(() => {
        const person1 = createInstance(Person);
        console.info('person1.name', person1.name);

        const person2 = createInstance(Person2);
        console.info('person2.name', person2.name);
      });

      Button('获取用户信息').onClick(() => {
        const userInfo = new UserInfo();
        Object.keys(userInfo).forEach(key => {
          console.info(`key: ${key}`);
        });

        console.info(`年龄: ${userInfo.calculateAge()}`);
      });
    }
    .width('100%')
    .height('100%');
  }
}

打印

person['name']:张三
person['age']:30

1 + 2 = 3
1 - 2 = -1
Hello World

person1.name 张三
person2.name 李四

key: userName
key: birthInfo
key: calculateAge
年龄: 4

技术要点解析

1. 创建对象并获取属性

使用Object()创建对象并使用索引访问属性,以确保兼容性与正确性。

const person:object = Object({ name: '张三', age: 30 });
console.info(`person['name']:${person['name']}`);
console.info(`person['age']:${person['age']}`);

2. 执行动作

将方法定义为对象属性,并通过动态方式调用它们

this.actions.forEach(action => {
  if (action.description.includes('加法')) {
    action.action(1, 2);
  }
  // 其他条件分支...
});

3. 从TS文件创建实例

在某些情况下,ETS文件不支持特定的TypeScript语法特性,如new () => T语法。这时可以将这部分逻辑移到TS文件中,并在ETS文件中导入使用。例如,创建一个通用的工厂函数来实例化类:

const person1 = createInstance(Person);
console.info('person1.name', person1.name);

4. 遍历对象的属性

可以使用Object.keys()遍历对象的属性,并利用面向对象的思想通过实例方法计算年龄。

const userInfo = new UserInfo();
Object.keys(userInfo).forEach(key => {
  console.info(`key: ${key}`);
});

console.info(`年龄: ${userInfo.calculateAge()}`);

结论

本文介绍了HarmonyOS应用开发中的几个关键技巧,包括使用Object()创建对象、动态调用方法、使用TS文件中的工厂函数创建实例,以及遍历对象属性。通过遵循良好的命名规范和代码组织结构,可以使代码更加清晰易懂,便于后期维护。掌握了这些技巧后,开发者能够更加高效地开发出高质量的HarmonyOS应用程序。

标签:info,console,name,鸿蒙,示例,person,应用,action,new
From: https://blog.51cto.com/u_16508701/12167787

相关文章

  • 深入理解写屏障:原理与实际应用
    在现代编程语言中,垃圾回收器(GarbageCollector,GC)是内存管理的重要工具,它帮助开发者自动回收不再使用的内存对象。然而,随着并发编程的广泛应用,程序在运行过程中会不断修改对象的引用关系,这对垃圾回收器提出了新的挑战。为了解决这一问题,写屏障(WriteBarrier)应运而生。本文将详细......
  • Windows 11:如何轻松安装或卸载 Copilot 应用(多种方法)
    起初,Copilot是一个与Windows11和Windows10系统紧密结合的内置AI助手,能够通过回答问题、调整系统设置等功能来提高你的工作效率。 但从Windows1124H2开始,Copilot功能已经从系统中剥离出来,成了一个基于MicrosoftEdge的独立Copilot应用。这意味着,你可以像传统......
  • 鸿蒙应用示例:NEXT 中 Map 类型的使用及注意事项
    在JavaScript中,Map对象允许存储任何类型的键和值,提供了键值对的存储功能。在HarmonyOS中,Map的使用基本遵循JavaScript的标准,尤其是要注意set赋值只能用get获取,而索引赋值只能用索引获取。且它们可以同时赋值但遍历的方式又不同。【Map对象的赋值与获取】使用set方法赋值当你需要......
  • 征程6 工具链常用工具和 API 整理(含新手示例)
    1.引言征程6工具链目前已经提供了比较丰富的集成化工具和接口来支持模型的移植和量化部署,本帖将整理常用的工具/接口以及使用示例来供大家参考,相信这篇文章会提升大家对征程6工具链的使用理解以及效率。干货满满,欢迎访问2.hb_config_generatorhb_config_generator是用于获......
  • Nuxt.js 应用中的 app:redirected 钩子详解
    title:Nuxt.js应用中的app:redirected钩子详解date:2024/10/3updated:2024/10/3author:cmdragonexcerpt:app:redirected是Nuxt.js中的一个钩子,主要用于处理服务器端渲染(SSR)过程中发生的重定向。该钩子在重定向被执行之前被调用,允许开发者在重定向发生前进行一些操......
  • 10-入侵检测技术原理与应用
    10.1入侵检测概述1)概念20世纪80年代初期,安全专家认为:“入侵是指未经授权蓄意尝试访问信息、篡改信息,使系统不可用的行为。”美国大学安全专家将入侵定义为“非法进入信息系统,包括违反信息系统的安全策略或法律保护条例的动作”。我们认为,入侵应与受害目标相关联,该受害目......
  • 【开题报告】基于Springboot+vue农村住宅房屋信息管理应用系统(程序+源码+论文) 计算机
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着农村经济的快速发展和城乡一体化进程的加速推进,农村住宅房屋作为农村居民生活与生产的重要载体,其管理效率与信息化水平日益成为影响农村现代化建......
  • 第二百六十节 JPA教程 - JPA查询命名参数示例
    JPA教程-JPA查询命名参数示例JPQL支持两种类型的参数绑定语法。第一种是位置绑定,其中参数在查询字符串中通过问号后面跟随参数号来指示。执行查询时,开发人员指定应替换的参数编号。SELECTeFROMEmployeeeWHEREe.department=?1ANDe.salary>?2命名参数......
  • 【python应用】最牛逼的Python API文档生成:Sphinx全攻略
    原创蔡大叔在Python开发的世界里,代码的文档化是至关重要的。它不仅帮助开发者理解代码的功能和用法,还能在团队协作中发挥巨大作用。Sphinx,作为一个强大的文档生成器,已经成为Python项目文档化的首选工具。本文将带你全面了解如何使用Sphinx为你的Python项目生成精美且实用的API......
  • 三维激光扫描技术在文保修缮项目中的应用
    三维激光扫描技术作为一种新兴的高精度空间数据获取手段,其在文物保护和修缮项目中的应用日益广泛。这项技术通过快速获取物体表面的三维密集点云数据,为文物的数字化存档、保护、修复及再利用提供了强有力的技术支持。 数据采集:高精度与非接触性三维激......