zoukankan      html  css  js  c++  java
  • typescript 学习笔记

    1. 简单创建一个class 类

    1 class Person {
    2   // name:string;
    3   // constructor(name:string){
    4   //   this.name = name
    5   // }
    6   // 简化写法 在构造器的参数前面加上 访问属性,就是默认添加一个参数名的属性,并在构造器中进行赋值
    7   constructor(public name : string){}
    8   age: number = 18;
    9 }

    2. class 的 访问属性: public , protected , private

    public 共有的。 类的内外都可以使用。
    protected 受保护的。 类的内部使用,继承的子类中使用。
    private 私有的。 类的内部使用。
    类有2个特征: 封装、继承
    类的封装: 用public private 实现。 public可以被用户代码(类外)访问。private只能被类成员(类内)访问 和 友元 访问
    类的继承: protected左右就是实现继承。 protected可以被派生类对象访问。用户代码(类外)不可以访问。
     1 class Person {
     2   // name: string = 'abby';
     3   public name = 'abby';
     4   private age = 18;
     5   getAge(){
     6     return this.age // age 是私有属性 private,只能类成员访问。 不能类外访问
     7   };
     8   protected hair = 'black'; // hair 是受保护的方法 protected,只能类成员,及 派生类中访问
     9   protected sayHi(){
    10     console.log('hello!'); // sayHi 是受保护的方法 protected,只能类成员,及 派生类中访问
    11   }
    12 }
    13 
    14 class Teacher extends Person {
    15   getHair(){
    16     return this.hair
    17   }
    18 }
    19 const p = new Person()
    20 console.log(p.name);
    21 // console.log(p.age);  // age 是私有属性 private,只能类成员访问
    22 // p.sayHi() // sayHi 是受保护的方法,只能类成员,及 继承的子类中访问
    23 const t = new Teacher()
    24 console.log(t.getHair()) // getHair方法中调用的hair,是父类中的protected属性,可以在继承的子类中访问

    3. class 类的构造器

    用new 来创建对象的时候,就会调用class类中的constructor构造函数,从而进行一系列操作。

    1 class Person {
    2   constructor(public name : string){}
    3 }
    4 
    5 const p = new Person('abby') // 在Person 实例化的时候,就会进行执行 constructor函数
    class Person {
      // name:string;
      // constructor(name:string){
      //   this.name = name
      // }
      // 简化写法 在构造器的参数前面加上 访问属性,就是默认添加一个参数名的属性,并在构造器中进行赋值
      constructor(public name : string){}
    }
    派生类的 constructor 必须显式定义。
    跟 C#、Java 等语言会默认创建调用父类构造逻辑的 constructor 不一样。
    ES6 的 Class 要求派生类明确写上 constructor 并在其中调用 super 函数以确保父类构造逻辑运行。
     1 class Person {
     2   constructor(public name : string){}
     3 }
     4 
     5 const p = new Person('abby') // 在Person 实例化的时候,就会进行执行 constructor函数
     6 
     7 class Teacher extends Person {
     8   age: 18;
     9   constructor(_name:string){
    10     super(_name) // 子类的构造器中,要用super关键字先作为函数调用一下,之后就可以使用 this关键字 。
    11   }
    12 }
    13 
    14 const t = new Teacher('dell')

    4. 类的继承。 ES6 的 Class 要求如果父类有constructor,派生类必须明确写上 constructor 并在其中调用 super 函数以确保父类构造逻辑运行,

    es6规定在子类中使用this之前必须先执行一次super函数,super相当于Father.prototype.constructor.call(this)
    class Father{
      a = 2;
      constructor(){
        this.a = 1
      }
    }
    class Son extends Father {
      constructor(){
        super() // 在子类的构造器中使用
      }
    }

    5. 类的取值函数getter、存值函数setter。

    一般是配合private私有属性,进行类外的存值取值
    // class 类 的 1.取值函数getter、2.寸值函数setter。 一般是配合private私有属性,进行类外的存值取值
    
    class User {
      private _name: string;
      constructor(name: string){
        this._name = name
      };
      get name(){
        return this._name
      };
      set name(name){
        this._name = name
      }
    }
    const u = new User('Tom')
    console.log(u.name);
    u.name = 'Lily'
    console.log(u.name);
    console.log('------------------');
    
    
    class Person {
      constructor(private _name: string){}
      get name(){
        return this._name
      }
      set name(name: string){
        this._name = name
      }
    }
    
    const p = new Person('delly')
    // p._name // _name 是私有属性,不对外暴露。 
    // 若想在类外进行操作私有属性_name,可以通过setter、getter
    console.log(p.name);
    p.name = 'Abby'
    console.log(p.name);
    
    // 1. 创建一个——Person类。
    // 2. 通过构造函数 定义 私有属性 _name
    // 3. 通过取值函数、存值函数 对 私有属性_name 进行相关操作,这些操作通常是用来保护类的私有属性。
    // 4. 这样用户代码(类外)就可以使用

    6. 类的静态方法static

    class 类,一般成员属性,有3种访问属性, public(共有的)、private(私有的)、protected(受保护的)。这些属性,都是挂载在类的实例上的。  =>  实例方法
    class 类,static 静态属性 ,在成员方法前 加上 static关键字, 这个方法, 是直接挂载在类上的,而非实例上。
    es6中, 只有静态方法,而没有静态属性。 es7中,支持静态属性、静态方法。
    父类的静态方法,可以被子类继承、重写 (es6)
    子类可以通过 super来访问父类的静态方法 (es6)
    typescript 支持静态方法、静态属性
    // static 静态属性
    
    class Person {
      constructor(public name: string){}
      static classMethod(){
        return 'Person Name'
      };
      static getSex(){
        return ['male','female']
      };
    }
    console.log(Person.getSex())
    
    // 
    class User extends Person{
      static classMethod(){
        return super.classMethod() + ': User Name'
      }
    }
    console.log(Person.classMethod())
    console.log(User.classMethod())

    7. 抽象类 abstract class 

      1.供其他类继承的基类。
      2.抽象类不允许实例化。
      3. 抽象类中的抽象方法,必须在子类中实现。
    // 比如: 有多个类:Circle、Square、Triangle等图形类,这些类都有一些通用的属性、方法。那就可以把这些通用的属性、方法,抽出来,新建一个抽象类
    
    abstract class Geom{
      borderWeight:number;
      borderColor: string;
      getType(){
        return 'GEOM'
      };
      // getArea(){}; // 多个图形类通用的方法, 但是每种图形计算面积的具体操作是不同的 =>  抽象出 抽象方法
      abstract getArea(): number; // 在抽象类的抽象方法,只能定义抽象类,而不能实现这个抽象方法,这个具体的抽象方法只能在子类中进行实现。
    }
    
    class Circle extends Geom{
      // borderWeight:number; // 多个图形类通用的属性
      // getType(){return 'GEOM'}; // 多个图形类通用的方法,可以抽到抽象类中
      // getArea(){}; // 多个图形类通用的方法,可以抽到抽象类中
      radiusLength: number = 10;
      getArea(){
        return 1000
      }
    }
    class Square extends Geom{
      // borderWeight:number; // 多个图形类通用的属性  
      // getType(){return 'GEOM'}; // 多个图形类通用的方法,可以抽到抽象类中
      // getArea(){}; // 多个图形类通用的方法
       number = 10;
      height: number = 10
      getArea(){
        return 2000
      }
    }
    class Triangle {
      // borderWeight:number; // 多个图形类通用的属性
      // getType(){return 'GEOM'}; // 多个图形类通用的方法,可以抽到抽象类中
      // getArea(){}; // 多个图形类通用的方法
      angle: number = 90;
      getArea(){
        return 3000
      }
    }
    const c = new Circle()
    c.borderWeight = 20
    c.radiusLength = 200
    console.log(c);
    
    const s = new Square()
    s.width = 20
    s.getArea()
    console.log(s.getArea());
    console.log(s);

      

  • 相关阅读:

    转:在自己的工具条中使用ArcGIS Engine提供的命令和工具
    配置Subversion Apache TortoiseSVN
    vc++2005移除自定义向导目录
    NetAdvantage2006 For ASP.NET2.0印象
    三天了!今天终于成功安装ArcIMS9.2!
    vss 去除源代码管理
    转:设计模式趣谈
    转一篇:有关项目报告
    演练:使用 Visual Studio Team Test 进行单元测试
  • 原文地址:https://www.cnblogs.com/shine-lovely/p/14121123.html
Copyright © 2011-2022 走看看