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

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();

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

默认为public

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

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

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

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


可选参数

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

?:
可选属性

函数的参数中可以使用可选参数,必须写在必填参数后面,初始值参数可以放在可选参数后面
接口中可以使用可选参数
类中也可以使用可选参数
?.
当对象是一个可选属性时,调用对象的属性需要先判断这个对象是否赋值为对象了,还是undefined
 if(this.obj)
        this.obj.a=10;
    
console.log(this.obj?.a)

可以将这种方式简略为 this.obj?.a

存取器

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();

构造函数

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

class Box
   private constructor()

    

var b:Box=new Box();  //:Box  不能设置

静态属性和方法

静态属性可以不用设置初始值
当调用静态属性和方法时,通知都是使用类名调用
禁止在静态方法中使用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)

抽象类

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

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 
        
    

以上是关于TypeScript核心篇——类(class)-可选参数-存取器-构造函数-静态属性方法-抽象类的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript -- 面向对象特性

Typescript核心篇——函数_this指向—重载—泛型

TypeScript入门知识三(面向对象特性)

从0开始的TypeScriptの八:类

从0开始的TypeScriptの八:类

layaBox---TypeScript---接口