学习TypeScrip8(Class类)

简介: 使用 private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问

ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用ES6的“类”改写,就是下面这样。


//定义类
class Person {
    constructor () {
    }
    run () {
    }
}


1.ok!那我们在TS 是如何定义类的如下图


3acdefe6f1074aaea36bd7c9e06fe4d2.png


在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明


a5f9ca6e2bcc48738d59b816acf79b52.png


这样引发了第二个问题你如果了定义了变量不用 也会报错 通常是给个默认值 或者 进行赋值


48c2c425bc1c47599557a8103ff30b83.png


47d53797b01349d684bb973fd073673c.png


恭喜你已经学会了在class中 如何定义变量


2.类的修饰符


总共有三个 public private protected


2eaca794296640b183cdcdddb221ee68.png


使用public 修饰符 可以让你定义的变量 内部访问 也可以外部访问 如果不写默认就是public


a4a2499d7600474dac78dc9a3af3afa2.png


使用  private 修饰符 代表定义的变量私有的只能在内部访问 不能在外部访问


d64333f651ec4a799ca665cae11d0d72.png


5ac43616ad77488284bae4205db3f6c8.png


 使用  protected 修饰符 代表定义的变量私有的只能在内部和继承的子类中访问 不能在外部访问


TIPS:代码


class Person {
    public name:string
    private age:number 
    protected some:any
    constructor (name:string,ages:number,some:any) {
       this.name = name
       this.age = ages
       this.some = some
    }
    run () {
    }
}
class Man extends Person{
    constructor () {
        super("张三",18,1)
        console.log(this.some)
    }
    create () {
       console.log(this.some)
    }
}
let xiaoman = new Person('小满',18,1)
let man = new Man()
man.some


3. static 静态属性 和 静态方法


dd66b961270146ada29a9525d750feeb.png


我们用static 定义的属性 不可以通过this 去访问 只能通过类名去调用


0e398a1e6ad7452a8d607821e3969bdf.png


static 静态函数 同样也是不能通过this 去调用 也是通过类名去调用


a6bdc54f0e9140ebafdcb6b0568c164a.png


需注意: 如果两个函数都是static 静态的是可以通过this互相调用


77712c790646400ba121cb061994a762.png


4.interface 定义 类


fe05924183054a489cf8613feb579be7.png


ts interface 定义类 使用关键字 implements   后面跟interface的名字多个用逗号隔开 继承还是用extends


interface PersonClass {
    get(type: boolean): boolean
}
interface PersonClass2{
    set():void,
    asd:string
}
class A {
    name: string
    constructor() {
        this.name = "123"
    }
}
class Person extends A implements PersonClass,PersonClass2 {
    asd: string
    constructor() {
        super()
        this.asd = '123'
    }
    get(type:boolean) {
        return type
    }
    set () {
    }
}


5.抽象类


应用场景如果你写的类实例化之后毫无用处此时我可以把他定义为抽象类


或者你也可以把他作为一个基类-> 通过继承一个派生类去实现基类的一些方法


我们看例子


下面这段代码会报错抽象类无法被实例化


abstract class A {
   public name:string
}
new A()


例子2


我们在A类定义了 getName 抽象方法但为实现


我们B类实现了A定义的抽象方法 如不实现就不报错 我们定义的抽象方法必须在派生类实现


abstract class A {
   name: string
   constructor(name: string) {
      this.name = name;
   }
   print(): string {
      return this.name
   }
   abstract getName(): string
}
class B extends A {
   constructor() {
      super('小满')
   }
   getName(): string {
      return this.name
   }
}
let b = new B();
console.log(b.getName());


视频案例


//1. class 的基本用法 继承 和 类型约束
//2. class 的修饰符 readonly  private protected public
//3. super 原理
//4. 静态方法
//5. get set
interface Options {
    el: string | HTMLElement
}
interface VueCls {
    init(): void
    options: Options
}
interface Vnode {
    tag: string
    text?: string
    props?: {
        id?: number | string
        key?: number | string | object
    }
    children?: Vnode[]
}
class Dom {
    constructor() {
    }
    private createElement(el: string): HTMLElement {
        return document.createElement(el)
    }
    protected setText(el: Element, text: string | null) {
        el.textContent = text;
    }
    protected render(createElement: Vnode): HTMLElement {
        const el = this.createElement(createElement.tag)
        if (createElement.children && Array.isArray(createElement.children)) {
            createElement.children.forEach(item => {
                const child = this.render(item)
                this.setText(child, item.text ?? null)
                el.appendChild(child)
            })
        } else {
            this.setText(el, createElement.text ?? null)
        }
        return el;
    }
}
class Vue extends Dom implements VueCls {
    options: Options
    constructor(options: Options) {
        super()
        this.options = options;
        this.init()
    }
   static version () {
      return '1.0.0'
   }
   public init() {
        let app = typeof this.options.el == 'string' ? document.querySelector(this.options.el) : this.options.el;
        let data: Vnode = {
            tag: "div",
            props: {
                id: 1,
                key: 1
            },
            children: [
                {
                    tag: "div",
                    text: "子集1",
                },
                {
                    tag: "div",
                    text: "子集2"
                }
            ]
        }
        app?.appendChild(this.render(data))
        console.log(app);
        this.mount(app as Element)
    }
   public mount(app: Element) {
        document.body.append(app)
    }
}
const v = new Vue({
    el: "#app"
})


学习TypeScrip9(元组类型)_qq1195566313的博客-CSDN博客

目录
相关文章
|
1月前
|
编译器 C语言 C++
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
【C++专栏】C++入门 | 类和对象 | 类的引入、struct&class的区别、类的定义
13 0
|
7月前
|
druid Java 编译器
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
Java的第七篇文章——面向对象接口(包含了接口、static修饰符、final修饰符、main方法、内部类等知识点)
|
7月前
|
缓存 安全 Java
Java反射:深入了解Class对象
Java是一门强类型语言,它要求在编译时知道所有的类和对象类型。然而,有时候我们需要在运行时动态地获取和操作类的信息,这就是Java反射的用武之地。本文将深入探讨Java反射,特别是与Class对象相关的内容。
51 0
|
9月前
|
安全 Java 编译器
Java中的String实例化、Annotation注解类、继承的多态和Object类(附带相关面试题)
1.java中String两种实例化对象2.Annotation注解类 3.继承的多态 4.Object类
86 0
Java中的String实例化、Annotation注解类、继承的多态和Object类(附带相关面试题)
|
12月前
|
前端开发
前端学习笔记202304学习笔记第六天-动态绑定class类名
前端学习笔记202304学习笔记第六天-动态绑定class类名
46 0
|
Java API
Java反射(二)Class类
对class类做出介绍
90 0
|
Java C语言
Java继承——概念及extends关键字的使用
Java继承——概念及extends关键字的使用
170 0
typescript37-class的构造函数实例方法继承(extends
typescript37-class的构造函数实例方法继承(extends
64 0
typescript37-class的构造函数实例方法继承(extends
Java——重写(Override)与重载(Overload)(概念理解+应用举例)
Java——重写(Override)与重载(Overload)(概念理解+应用举例)
Java——重写(Override)与重载(Overload)(概念理解+应用举例)
|
Java
Java 学习(09)--方法重载/构造函数/static 变量
Java 学习(09)--方法重载/构造函数 1 、方法 方法是一组为了实现特定功能的代码块的集合。方法在语法上的功能主要有以下两个: ①:结构化代码 将代码按照功能进行组织, 使代码的结构比较清晰, 容易阅读和修改, 也就是程序的可维护性强。
961 0