前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >03. 从TypeScript入手,驾驭HarmonyOS开发的技术风潮!-----------(下篇)

03. 从TypeScript入手,驾驭HarmonyOS开发的技术风潮!-----------(下篇)

作者头像
全栈若城
发布2024-03-10 09:03:11
980
发布2024-03-10 09:03:11
举报
文章被收录于专栏:若城技术专栏若城技术专栏

本章知识大纲

image.png
image.png

存取器

TypeScript 支持通过 getters/setters 来截取对对象成员的访问。 它能帮助你有效的控制对对象成员的访问。

读取器
代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-16 17:20:51
 * @LastEditTime: 2024-01-16 17:33:11
 */
// 存取器: 让我们可以有效的控制对 对象中的成员的访问, 通过getters 和setters 来进行操作

(()=>{
    // 外部可以传入姓氏和名字数据, 同时使用set 和 get  控制姓名的数据, 外部也可以进行修改操作 
    class Person{
        firstName: string 
        lastName: string

        constructor(firstName:string , lastName: string){
            this.firstName = firstName
            this.lastName = lastName
        }
        // 姓名的成员属性(外部可以访问, 也可以修改 )

        // 读取器 - 负责读取数据的
        get fullName(){
            console.log('get中...');
            
            return this.firstName +'_'+ this.lastName
        }

        // 设置器 - 负责设置数据的(修改)
        // set fullName(){
        //     //  将获取到的数据重新复制给firstName 和 lastName
        // }
    }

    //  实例化对象
    const person:Person = new Person('令狐', '冲')
    console.log(person);
    // 获取该属性的成员属性
    console.log(person.fullName);

 
    
})()

** 代码中我们获取该属性的成员属性时 get 会被触发**

image.png
image.png

但是如果我们像设置该属性的数据时就会报错 , 此时我们就要使用set 属性进行修改

代码语言:javascript
复制
    //设置该属性的数据 
person.fullName = '诸葛_孔明'
image.png
image.png
设置器
代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-16 17:20:51
 * @LastEditTime: 2024-01-16 17:38:06
 */
// 存取器: 让我们可以有效的控制对 对象中的成员的访问, 通过getters 和setters 来进行操作

(()=>{
    // 外部可以传入姓氏和名字数据, 同时使用set 和 get  控制姓名的数据, 外部也可以进行修改操作 
    class Person{
        firstName: string 
        lastName: string

        constructor(firstName:string , lastName: string){
            this.firstName = firstName
            this.lastName = lastName
        }
        // 姓名的成员属性(外部可以访问, 也可以修改 )

        // 读取器 - 负责读取数据的
        get fullName(){
            console.log('get中...');
            
            return this.firstName +'_'+ this.lastName
        }

        // 设置器 - 负责设置数据的(修改)
        set fullName(val){
            console.log('set中....');
            
            //  将获取到的数据重新复制给firstName 和 lastName
            let names = val.split('_')
            this.firstName = names[0]
            this.lastName = names[1]
        }
    }

    //  实例化对象
    const person:Person = new Person('令狐', '冲')
    console.log(person);
    // 获取该属性的成员属性
    console.log(person.fullName);

    // 设置该属性的数据 
    person.fullName = '诸葛_孔明'
    console.log(person.fullName);
    
    
})()

添加设置器

代码语言:javascript
复制
        // 设置器 - 负责设置数据的(修改)
        set fullName(val){
            console.log('set中....');
            
            //  将获取到的数据重新复制给firstName 和 lastName
            let names = val.split('_')
            this.firstName = names[0]
            this.lastName = names[1]
        }

修改并调用

代码语言:javascript
复制
 // 设置该属性的数据 
    person.fullName = '诸葛_孔明'
    console.log(person.fullName);

效果如下

image.png
image.png

静态属性

静态成员

在类中通过static 修饰的属性或者方法,那么就是静态的属性及静态的方法, 也称之为:静态成员 静态成员在使用的时候是通过类名.的这种语法来调用的

在constructor 中的name1 会报错 ,原因如下 : 此时this 是实例对象,name1 是静态属性,不能通过实例对象直接调用将他属性来使用

代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-16 17:42:38
 * @LastEditTime: 2024-01-16 17:55:28
 */

//  静态成员: 在类中通过static 修饰的属性或者方法,那么就是静态的属性及静态的方法, 也称之为:静态成员
//  静态成员在使用的时候是通过类名.的这种语法来调用的
(()=>{
    //  定义一个类
    class Person{
      
        // 类中默认有一个内置的name 属性, 因此 如果static 的静态属性 是name 的话会报错
        //  静态属性:
         static name1:string
         constructor(name:string){
            this.name1 = name
         }
         sayHi(str?:string):void{
            console.log('还有谁');
            
         }
    }

    //  实例化对象
    const person: Person = new Person('张无忌')
    // 通过实例对象调用的属性(实例属性)
    console.log(person.name1);

    //  通过实例对象调用的方法(实例方法)
    person.sayHi()

})()

报错信息如下

image.png
image.png
静态属性
  1. 通过类名.静态属性的方式来访问该成员的数据
  2. 通过类名.静态属性的方式来设置改成员数据
代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-16 17:42:38
 * @LastEditTime: 2024-01-16 18:07:07
 */

//  静态成员: 在类中通过static 修饰的属性或者方法,那么就是静态的属性及静态的方法, 也称之为:静态成员
//  静态成员在使用的时候是通过类名.的这种语法来调用的
(()=>{
    //  定义一个类
    class Person{
      
        // 类中默认有一个内置的name 属性, 因此 如果static 的静态属性 是name 的话会报错
        //  静态属性:
         static name1:string ='张无忌'
         constructor(name?:string){
            //  此时this 是实例对象,name1 是静态属性,不能通过实例对象直接调用将他属性来使用
            // this.name1 = name

         }
         sayHi(str?:string):void{
            console.log('还有谁');
            
         }
    }

    //  实例化对象
    // const person: Person = new Person()
    // 通过实例对象调用的属性(实例属性)
    // console.log(person.name1);
    //  通过实例对象调用的方法(实例方法)
    // person.sayHi()

    // 通过类名.静态属性的方式来访问该成员的数据
    console.log(Person.name1);

    // 通过类名.静态属性的方式来设置改成员数据
    Person.name1 = '赵敏'
    console.log(Person.name1);
    
    

})()
静态方法

通过类名.静态方法的方式来调用内部的静态的方法 注意: 构造函数是不能通过static 来进行修饰的

代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-16 17:42:38
 * @LastEditTime: 2024-01-16 18:14:16
 */

//  静态成员: 在类中通过static 修饰的属性或者方法,那么就是静态的属性及静态的方法, 也称之为:静态成员
//  静态成员在使用的时候是通过类名.的这种语法来调用的
(()=>{
    //  定义一个类
    class Person{
      
        // 类中默认有一个内置的name 属性, 因此 如果static 的静态属性 是name 的话会报错
        //  静态属性:
         static name1:string ='张无忌'
         constructor(name?:string){
            //  此时this 是实例对象,name1 是静态属性,不能通过实例对象直接调用将他属性来使用
            // this.name1 = name

         }
         static sayHi(str?:string):void{
            console.log('还有谁');
            
         }
    }

    //  实例化对象
    // const person: Person = new Person()
    // 通过实例对象调用的属性(实例属性)
    // console.log(person.name1);
    //  通过实例对象调用的方法(实例方法)
    // person.sayHi()

    // 通过类名.静态属性的方式来访问该成员的数据
    console.log(Person.name1);

    // 通过类名.静态属性的方式来设置改成员数据
    Person.name1 = '赵敏'
    console.log(Person.name1);
    
    // 通过类名.静态方法的方式来调用内部的静态的方法
    Person.sayHi()

})()

抽象类

抽象类做为其它派生类的基类使用。 它们不能被实例化。不同于接口,抽象类可以包含成员的实现细节。 abstract 关键字是用于定义抽象类和在抽象类内部定义抽象方法。

代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-17 10:26:14
 * @LastEditTime: 2024-01-17 11:49:22
 */

// 抽象类: 包含抽象方法, (抽象方法一般没有任何具体的内容实现), 也可以包含实例方法, 抽象类是不能被实例化 , 为了让子类进行实例化及实现内部的抽象方法

(()=>{
//  定义一个抽象类
abstract class Animal{
    // 抽象方法
        abstract eat()
    // 会报错, 抽象方法不能有具体的实现
    // abstract eat(){
    //      console.log('具体方法实现');
         
    // }
    // 实例方法
    run(){
         console.log('实例方法');
         
    }
}
 
// 不能实例化抽象类的对象
const ani:Animal = new Animal()

不能实例化抽象类的对象

image.png
image.png

可以在子类(派生类)中进行抽象类的抽象方法的实现

代码语言:javascript
复制
/*
 * @Description: 
 * @Author: 若城
 * @Date: 2024-01-17 10:26:14
 * @LastEditTime: 2024-01-17 11:49:22
 */

// 抽象类: 包含抽象方法, (抽象方法一般没有任何具体的内容实现), 也可以包含实例方法, 抽象类是不能被实例化 , 为了让子类进行实例化及实现内部的抽象方法

(()=>{
//  定义一个抽象类
abstract class Animal{
    // 抽象方法
        abstract eat()
    // 会报错, 抽象方法不能有具体的实现
    // abstract eat(){
    //      console.log('具体方法实现');
         
    // }
    // 实例方法
    run(){
         console.log('实例方法');
         
    }
}
//  定义一个子类(派生类)Dog
class Dog extends Animal{
    eat() {
        console.log('狗的抽象方法');
        
    }
}
// 不能实例化抽象类的对象
//  const ani:Animal = new Animal()

// 实例化Dog 对象
const dog:Dog = new   Dog()
dog.eat()
})()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本章知识大纲
  • 存取器
    • 读取器
      • 设置器
      • 静态属性
        • 静态成员
          • 静态属性
            • 静态方法
            • 抽象类
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档