前端系列三十三:TS中的class类

本文详细讲解了TypeScript中的class类,包括实例属性初始化、构造函数、实例方法、继承、实现接口、类成员可见性以及只读修饰符。通过具体的代码示例,阐述了如何使用这些特性来构建更健壮的前端应用。

实例属性初始化:

写法:

class Person {
        age: number
        gender = ' 男 '
        }

const p = new Person( )

解释:

1.声明成员 age,类型为number ( 没有初始值 )

2.声明成员 gender, 并设置初始值, 此时,可省略类型注解 ( TS类型推论为string类型 )

class类:

构造函数:

class Person {
       age: number
       gender: string
    
        constructor ( age: number, gender: string ) {
        this.age = age
        this.gender = gender
        }

    }

解释:

1.成员初始化( 比如 age: number ) 后,才可以通过 this.age 来访问实例成员

2.需要为构造函数指定类型注解,否则会被隐式推断为 any; 构造函数不需要返回值类型

实例方法:

class Point {
     x = 10
                 y= 10

    scale( n:number ): void {
    this.x *= n
    this.y *= n
    }
     }

解释:

方法的类型注解 ( 参数和返回值 ) 与函数用法相同


继承:

两种方式:
    1. extends ( 继承父类 ) :

    class Animal {
    move() { console.log('Moving dlong') }
    }

    class Dog extends Animal { 
    bark() { console.log( '汪' ) }
     }

    const dog = new Dog( )

解释:

通过extends 关键字实现继承

子类Dog 继承父类Animal 则 Dog的实例对象 dog 就同时具有了父类 Animal 和子类 Dog的
所有属性和方法

    2. implements ( 实现接口 ):

写法:

interface Singale { 
    sing( ) : void
    name: string
    }

    class Person implements Singale {
    name: 'jack'
    sing( ) {
    console.log( '你是我的小苹果' )
    }
    }

解释:

通过'implements' 关键字让 class 实现接口

    Person类实现接口 Singable 意味着,Person 类中必须 提供 Singable 接口中指定所有的方法
和属性

类成员可见性:

可以使用TS来'控制class的方法或属性对于class外的代码是否可见'

    可见性修饰符包括:

    (1).public (公有的):表示公有的,'公有成员可以被任何地方访问',默认可见性

    class Animal {
    public move ( ) { 
        console.log( 'Moving along' )
     }
    }


解释:

     1.在类属性或方法前面添加 ' public' 关键字,来修饰该属性或方法是共有的

     2. 因为 public 是默认可见性,所以,'可以直接省略'

(2) protected: 表示'受保护的',仅对其声明所在类和子类中 (非实例对象) 可见

class Animal {
    protected move ( ) { 
        console.log( 'Moving along' )
     }
    }
    
    class Dog extends Animal {
    bark( ) { 
    console.log( '汪!' )
    }
    this.move( )
    }

解释:

1.在类属性或方法前面添加 protected 关键字, 来修饰该属性或方法是受保护的

2.在子类的方法内部可以通过 this来访问父类中受保护的成员, 但是,'对实例不可见'

(3)private: 表示'私有的,只在当前类中可见',对实例对象以及子类也是不可见的

写法:

class Animal { 
         private move( ) { console.log( 'hello' ) }

        walk ( ) {  
       this.move( )
     }
    }

解释:

1.在类属性或方法前面添加 'private' 关键字,来修饰该属性或方法是私有的

 2.私有的属性或方法只在当前类中可见,对子类和实例对象也都是不可见的

只读修饰符:

readonly
    readonly: 表示'只读',用来防止在构造函数之外对属性进行赋值

    写法:
    class Person {
    readonly  age: number = 18
    constructor ( age: number ) {
    this.age = age
    }
    }

解释:

1.使用'readonly' 关键字修饰属性是只读的,注意'只能修饰属性不能修饰方法'
    
    2.注意:属性age后面的类型注解 ( 比如,此处的number )如果不加,则age的类型为18 (字面量类型)

    3.'接口或者{}表示的对象类型,也可以使用readonly' 

### Vue TypeScript 语法实现组合键唤出搜索框功能 在 Vue 3 中使用 TypeScript语法实现通过组合键唤出搜索框的功能,可以通过以下方式完成。首先需要明确的是,Vue 3 的 `class` 风格开发通常结合 `vue-class-component` 和 `vue-property-decorator` 库来实现[^1]。此外,为了监听键盘事件并触发特定功能,可以利用 Vue 的事件绑定机制和 TypeScript型安全特性。 以下是完整的实现代码示例: ```typescript <template> <div> <!-- 搜索框 --> <input v-if="isSearchVisible" ref="searchInput" type="text" placeholder="请输入搜索内容" /> </div> </template> <script lang="ts"> import { Vue, Component, Watch } from "vue-property-decorator"; @Component export default class SearchBox extends Vue { // 控制搜索框的显示状态 private isSearchVisible: boolean = false; // 监听键盘事件 mounted(): void { window.addEventListener("keydown", this.handleKeyDown); } // 移除事件监听器以避免内存泄漏 beforeDestroy(): void { window.removeEventListener("keydown", this.handleKeyDown); } // 组合键逻辑处理 private handleKeyDown(event: KeyboardEvent): void { // 判断是否按下 Ctrl + S if (event.ctrlKey && event.key === "s") { event.preventDefault(); // 防止默认行为 this.isSearchVisible = !this.isSearchVisible; // 切换搜索框的显示状态 // 如果显示搜索框,则自动聚焦 if (this.isSearchVisible) { this.$nextTick(() => { const inputElement = this.$refs.searchInput as HTMLInputElement; inputElement.focus(); }); } } } } </script> <style scoped> /* 样式可以根据需求调整 */ input { padding: 8px; border: 1px solid #ccc; border-radius: 4px; } </style> ``` #### 实现说明 1. **语法支持**:通过 `vue-property-decorator` 提供的装饰器(如 `@Component`),可以在 Vue 中使用语法进行开发[^1]。 2. **键盘事件监听**:通过 `window.addEventListener` 方法监听全局键盘事件,并在组件销毁时移除监听器以防止内存泄漏[^2]。 3. **组合键逻辑**:通过判断 `event.ctrlKey` 和 `event.key` 来识别组合键(例如 Ctrl + S)。如果满足条件,则切换搜索框的显示状态[^2]。 4. **自动聚焦**:当搜索框显示时,使用 `$nextTick` 确保 DOM 更新完成后,调用 `focus()` 方法让输入框获得焦点[^2]。 #### 注意事项 - 在实际项目中,可能需要根据浏览器兼容性调整键盘事件的监听方式。 - 如果项目中未安装 `vue-class-component` 或 `vue-property-decorator`,需要先通过 npm 或 yarn 安装它们。 - 使用组合键时,建议避免与系统级快捷键冲突,例如 Ctrl + S 通常用于保存文件。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值