• 【2019-12-10】类


    传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员来讲就有些棘手,因为他们用的是基于类的继承并且由类构件出来的。

    1、类

     

     2、继承

    子类是派生类,基类是超类, 派生类包含了一个构造函数,它必须调用super,它会执行基类的构造函数

    此例子演示了如何在子类里可以重写父类的方法

    注意: tom的类型是Animal2,但是值是Horse的实例,所以会调用Horse类中的move方法

     

    子类中的属性,若没有赋值,则必须在构造函数中初始化

     

     在派生类的构造函数里访问this的属性之前,我们一定要调用super(), 这个是typescript强制执行的一条重要规则

     

     3、共有,私有与受保护的修饰符

    默认为 public

    当成员为private, 它就不能再声明它的类的外部访问。

     

     typeScript使用的是结构性类型系统。当我们比较两种不同的类型时,并不在乎它们从何处而来,如果所有成员的类型都是兼容的,我们就认为它们的类型时兼容的

    然后,当我们带有private或protected成员的类型的时候,情况就不同了。如果其中一个类型里包含一个private成员,name只有当另一个类型中也存在这样一个private成员,并且它们都是来自同声明时,我们才认为这两个类型是兼容的。对于protected成员也使用这个规则

     

     protected

    protected  修饰符与private修饰符的行为很相似,但有一点不同,protected成员在派生类中仍然可以访问

    子类要继承某个基类,就会访问其基类的构造函数;创建此类的实例,也会自动调用构造函数,若是将构造函数标记为private,则构造函数就不能被子类和实例访问,也就是不能被继承和不能被实例化

     

     构造函数也可以被标记为protected,这意味着这个类不能再包含它的类外被实例化,但是可以被继承

     

    4、readonly修饰符

    你可以使用readonly关键字将属性设置为只读的。只读属性必须在声明时或者构造函数里被初始化

     

     参数属性

    参数属性可以很方便的让我们在一个地方定义并初始化一个成员

     

     在构造函数里使用readonly name8: string 参数来创建和初始化name8成员。我们把声明和赋值合并至一处

    参数属性是通过给构造函数参数前面添加一个访问限定符来声明。使用private限定一个参数会声明并初始化一个私有成员,对于public和protected来说也是一样。

    注意:这个访问限定符不能被省略,否则就不属于类的属性,只能是构造函数的参数 

    5、存取器

    Typescript支持通过getters/setters来截取对象成员的访问。他能帮助你有效的控制对象成员的访问

    如果只带有get不带有set的存取器会自动被推断为readonly

     

     注意:如果get / set方法中只有赋值语句,不做任何约束条件,则没有必要使用get/set方法,使用get/set的好处就是,只需要在一个地方对属性成员进行逻辑处理,而不需要在每个调用属性的地方进行逻辑处理

    6、静态属性

    这些属性存在于类本身,而不是类的实例上

     

    7、抽象类

    抽象类作为其他派生类的基类使用。它们一般不会直接被实例化。不同于接口,抽象类可以包含成员的实现细节。

    abstract关键字适用于定义抽象类和在抽象类内部定义的抽象方法

     

     8、高级技巧

    --构造函数

     

     --把类当做接口使用

    类定义会创建两个东西:类的实例类型和一个构造函数。因为类可以创建出类型,所以你能够在允许使用接口的地方使用类

     

  • 相关阅读:
    #maven解决乱码问题
    #jquery隐藏和启用
    date类型时间比较大小
    xml<>编译
    Linux分区有损坏修复
    linux部署相关命令
    Java实现4位数吸血鬼数字算法
    Java冒泡算法及中位数算法
    DT梦工厂 第25课 Scala中curring实战详解
    DT梦工厂 第24讲 scala中sam转换实战详解
  • 原文地址:https://www.cnblogs.com/QQ-lala/p/12024836.html
Copyright © 2020-2023  润新知