• TypeScript核心篇——类(class)-可选参数-存取器-构造函数-静态属性方法-抽象类


    传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,
    那么和es6一样的是class的继承和构造。
    但不同的是typescript又多了以下属性,模仿java,c#面向对象构建出来三个修饰符 public protected private:功能和java,c#基本一致,实现了面向对象式的发展。

    class Box{
        public a:number=1;
        protected b:number=2;
        private c:number=3;
        public play():void{
            console.log(this.a);
            console.log(this.b);
            console.log(this.c);
            this.run();
            this.jump();
        }
        protected run():void{
    
        }
        private jump():void{
    
        }
    
    }
    var p = new Box();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    公共,私有与受保护的修饰符public private protected

    默认为public

    *publicprotectedprivate*
    实例化对象可以调用不可调用不可调用public是对外暴露的
    在当前类中可以调用可以调用可以调用
    继承后的子类中可以调用可以调用不可调用私有属性和方法不能在子类中调用
    override父类方法可以重写可以重写不可以重写
    接口继承类可以继承不可以继承不可以继承只有全部都是public属性方法的类才可以被接口继承
    • 优先设定类中的属性和方法都是private(私有的)

    • 当需要继承时,并且需要通过继承后进行调用和覆盖重新方法时,需要调用和覆盖的方法属性,在父类中改为protected受保护的

    • 然后子类在调用这些方法属性时都使用protected(受保护的)

    • 当需要将类中属性和方法暴露在外,实例化对象可以调用的,修改为public 设置为公有的


    可选参数

    如果类中的属性设置类型并不包含undefined或者并不是可选属性,必须设置初始值,或者在构造函数中设置该值;

    ?:
    可选属性
    
    函数的参数中可以使用可选参数,必须写在必填参数后面,初始值参数可以放在可选参数后面
    接口中可以使用可选参数
    类中也可以使用可选参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    ?.
    当对象是一个可选属性时,调用对象的属性需要先判断这个对象是否赋值为对象了,还是undefined
     if(this.obj){
            this.obj.a=10;
        }
    console.log(this.obj?.a)
    
    可以将这种方式简略为 this.obj?.a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    存取器

    class Box{    
        private _step:number= 1;
        constructor(){
    
        }
        // 存取器中set方法不要设置返回类型,参数必须要设置类型
        public set step(value:number){
            this._step = value;
        }
         // 存取器中get方法必须要设置返回类型
        public get step(){
            return this._step;
        }
    
    }
    var b = new Box();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    构造函数

    构造函数不能设置返回值
    构造函数可以使用private和protected 设置,但是如果这样设置就无法在外面new这个构造函数了,
    (单例模式要用)

    class Box{
       private constructor(){
    
        }
    }
    var b:Box=new Box();  //:Box  不能设置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    静态属性和方法

    静态属性可以不用设置初始值
    当调用静态属性和方法时,通知都是使用类名调用
    禁止在静态方法中使用this,虽然可以使用,但是这里强调大家不要使用,以防止和实例方法中this的区分

    class Box{
       public static a:number;
       private static b:number;
       protected static c:number;
    
       public static play():void
       {
            // this.a
            // Box.a
       }
    }
    Box.play();
    console.log(Box.a)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    抽象类

    这个抽象类是不能实例化的
    抽象类的作用是作为基类使用,用来继承的
    接口中是完全没有实现任何功能,只有方法名和属性名
    在抽象类实现了部分方法的功能,并且设置了一些类似接口的方法名和属性名
    在继承抽象类后,由个子类分别实现

    abstract class Box{
        public a:number=1;
        public abstract update():void;
        public abstract b:number;
        public play():void
        {
            console.log("aaa")
        }
         protected run():void
        {
            console.log("bbb");
        }
    }
    
    class Ball extends Box{
        public b: number=1;
        public update(): void {
            
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    UVM寄存器模型:reg adapter实现和集成
    下载Windows 10操作系统和在VMware虚拟机中配置完成
    SparkSQL【核心编程、使用IDEA开发、用户自定义函数】
    网络安全(黑客)自学
    电子产品量产工具-软件架构-显示系统
    Redis核心数据结构与高性能原理
    Mysql中数据表的约束
    vmware网络负载均衡方式
    有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输人10个学
    list的const迭代器的实现
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/126310780