4.typescript类

1.类

 Class Person {
		name!: string
		age: number
	
		constructor(name: string, age: number){
			this.name = name
			this.age = age
		}
		
		running(){
			console.log(this.name+ ' running ')
		}
		eating(){
			console.log(this.name+ ' eating ')
		}
}

2.类的继承(extends)

 Class Student extends Person {
		sno: number
	
		constructor(name: string, age: number, sno: number){
			super(name,age)
			this.sno = sno
		}
		
		studying(){
			console.log(this.name+ 'studyning ')
		}
}

3.类的多态

不同的数据类型进行同一操作,表现出不同的行为
定义:为不同数据类型的实体(子类实体)提供统一的接口(父类类型的引用)
示例:函数的形参只写父类引用(统一参数),且此函数接受父类实例对象和任意子类实例对象,以此来统一按需调用不同的类的相同方法

 Class Animal {
		action(){
			console.log('animal action')
		}
}

 Class Dog extends Animal {
		action(){
			console.log('dog running!')
		}
}

 Class Fish extends Animal {
		action(){
			console.log('fish swimming!')
		}
}

//animal: dog/fish
function makeActions(animal:Animal[]){
	anmials.forEach(an =>{
		an.action()
	}
}

makeActions([new Dog(),new Fish()])

父类引用指向子类对象
多态的目的:写出更加通用性的代码

const animal:Animal = new Dog()
animal.action()

4.类的成员修饰符

public、private、protected
①public 修饰的是在任何地方可见、公有的属性或方法,默认编写的属性就是public的;
②private 修饰的是仅在同一类中可见、私有的属性或方法;(子类和实例对象也不能)
③protected 修饰的是仅在类自身及子类中可见、受保护的属性或方法;
public是默认的修饰符,也是可以直接访问的,我们这里来演示一下protected和private。

class Person {
	protected name: string

	constructor(name: string) {
		this.name = name
	}
}

class Student extends Person {
	constructor(name: string) {
		super(name)
	}

	running(){
		console.log(this.name+ ' running ')
	}
}
class Person {
	private name: string

	constructor(name: string) {
		this.name = name
	}
}

const p = new Person("bai")
//Property 'name' is private and only accessible...
//console.log(p.name)

5.只读属性readonly

如果有一个属性我们不希望外界可以任意的修改,只希望确定值后直接使用,那么可以使用readonly:

class Person {
	readonly name: string

	constructor(name: string) {
		this.name = name
	}
}

const p = new Person("bai")
// Cannot assign to 'name' xxxx
//p.name = "xiao"

6.getters/setters

在前面一些私有属性我们是不能直接访问的,或者某些属性我们想要监听它的获取(getter)和设置(setter)的过程,
这个时候我们可以使用存取器

class Person {
	private _name: string

	set name(newName){
		this._name = newName
	}

	get name(){
		return this._name 
	}

	constructor(name: string) {
		this.name = name
	}
}

const p = new Person("xiao")
p.name = "bai"
console.log(p.name)

7.静态成员

前面我们在类中定义的成员和方法都属于对象级别的, 在开发中, 我们有时候也需要定义类级别的成员和方法。
在TypeScript中通过关键字static来定义:

class Student {
	static time:string = "20:00"

	static attendClass() {
		console.log('123')
	}
}

console.log(Student.time)
Student.attendClass()

8.抽象类abstract

  • 以abstract开头的类是抽象类
  • 抽象类和其他类区别不大,只是不能用来创建对象
  • 抽象类就是专门用来被继承的类
  • 抽象类中可以添加抽象方法抽象方法只能定义抽象类中子类必须对抽象方法进行重写
//以abstract开头的类是抽象类
// 抽象类和其他类区别不大,只是不能用来创建对象
// 抽象类就是专门用来被继承的类
// 抽象类中可以添加抽象方法
abstract class Animal{
    //属性
    name:string;
    age:number;
    //构造函数,对象创立之前调用。
    constructor(name:string,age:number){
        //this表示当前实例
        this.name=name;
        this.age=age;
    }
    //抽象方法,,没有方法体
    //抽象方法只能定义抽象类中,子类必须对抽象方法进行重写
    abstract sayHello():void;
}
//dog类继承Animal类
class Dog extends Animal{
    run(){
        console.log(this.name+"跑");
    }
    //这里重写没有报错
    sayHello(): void {
        console.log('I am a dog!');
    }
}
//cat类继承Animal类
class Cat extends Animal{

    //子类重写父类的函数
   sayHello(): void {
    //调用当前类的父类
    //   super.sayHello()  没有实现会报错
   }
}

 const dog= new Dog("小狗",12);
 

9.类的类型

类本身也是可以作为一种数据类型的:

class Person {
	name: string;
	constructor(name: string){
		this.name = name
	}
	running(){
		console.log(this.name + 'running')
	}
}

const p1:Person = new Person("why")
const p2:Person = {
	name:"kebe",
	running: function(){
		console.log(this.name+"running")
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. Vue 3相对于Vue 2的优势主要包括: - 更小的体积:Vue 3对内部代码进行了重构,采用了更好的编译优化和摇树优化,使得打包后的体积更小。 - 更好的性能:Vue 3引入了Proxy代理对象,替代了Vue 2中的Object.defineProperty,使得响应式系统的性能得到了大幅提升。 - 更好的型推导:Vue 3使用了TypeScript进行重写,提供了更好的型推导支持,使得开发者在编写代码时能够更加准确地获取型推断。 - 更好的组合API:Vue 3引入了Composition API,使得组件逻辑可以更好地组织和复用,而不再依赖于Options API。 - 更好的逻辑复用:Composition API的引入使得逻辑复用更加容易,开发者可以将逻辑提取为独立的函数,并在多个组件中进行共享。 2. Vue 3的响应式原理与Vue 2有所不同。在Vue 2中,通过Object.defineProperty来实现数据劫持和观察,从而实现响应式。而在Vue 3中,使用了Proxy代理对象来实现响应式。 Proxy代理对象可以监听对象上的操作,并在发生改变时触发相应的行为。Vue 3中使用Proxy对象来监听组件的数据变化,并通过触发相应的更新操作来实现响应式。相比于Vue 2的Object.defineProperty,Proxy具有更好的性能和更灵活的API。 3. Vue 3的一些新特性包括: - Composition API:提供了更好的逻辑组织和复用方式,使得代码更加清晰和可维护。 - Fragments:可以在组件中使用多个根元素,而不再需要一个根元素包裹。 - Teleport:可以将组件的内容渲染到DOM中的任意位置。 - Suspense:用于处理异步组件的加载状态,可以在加载完成前展示占位内容。 - 其他一些性能优化和语法糖改进。 4. Vue 3的生命周期相比Vue 2有所变化。Vue 3中的生命周期钩子函数有以下几个: - beforeCreate:在实例初始化之前被调用。 - created:在实例创建完成后被调用,可以访问到data、methods等选项。 - beforeMount:在挂载开始之前被调用。 - mounted:在挂载完成后被调用,可以访问到DOM元素。 - beforeUpdate:在数据更新之前被调用,发生在虚拟DOM重新渲染和打补丁之前。 - updated:在数据更新之后被调用,发生在虚拟DOM重新渲染和打补丁之后。 - beforeUnmount:在卸载组件之前被调用。 - unmounted:在卸载组件之后被调用。 5. Vue 3中可以使用自定义hooks来实现逻辑的复用。自定义hooks是一个函数,可以在组件中调用,并且可以在多个组件中共享逻辑。 自定义hooks可以通过组合API的方式来实现。可以将一些逻辑提取为独立的函数,然后在不同的组件中调用这些函数,从而实现逻辑的复用。 6. TypeScript是一种静态型检查的JavaScript超集。它为JavaScript添加了型注解和一些新的语法特性,以提供更好的代码提示、型检查和重构支持。 7. TypeScript提供了多种数据型,包括基本型(如number、string、boolean等)、对象型(如object、array等)、函数型、元组型、枚举型等。 8. TypeScript中的函数可以指定参数型、返回值型,并且支持可选参数和默认参数。函数型可以通过箭头函数表达式或function关键字进行定义。 9. 在TypeScript中,可以通过class关键字进行定义。可以包含属性、方法和构造函数,并且可以继承其他或实现接口。 10. Yarn是一个替代npm的包管理工具。它具有更快的安装速度和更好的缓存机制,可以提高项目的构建效率。 安装Yarn可以通过npm全局安装命令进行安装:npm install -g yarn 使用Yarn可以通过yarn install命令安装项目依赖,通过yarn add命令添加新的依赖,通过yarn remove命令移除依赖,通过yarn start命令运行项目等。 11. 在Vue 3中使用TypeScript可以通过以下步骤快速使用和封装: - 创建一个Vue 3的TypeScript项目 - 在组件中使用TypeScript型注解来声明props、data、computed等属性的型 - 使用Composition API来组织和复用逻辑 - 在Vue 3的模板中使用TypeScript的语法和表达式进行数据绑定和渲染 - 封装可复用的组件时,可以使用TypeScript的接口来定义props的型和事件的型,以提供更好的型检查和代码提示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值