TypeScript深入 - 类

  class是TypeScript 的核心,使用TypeScript开发时,大部分代码都是写在类里面。

类的定义

如下形式:

class Person { 
    public name;
    public getName() { 
        console.log(this.name);
    }
}

var p1 = new Person();  //实例化
p1.name = "Batman";
p1.getName();

var p2 = new Person();
p2.name = "Superman";
p2.getName();

构造函数

  构造函数constructor,在实例化后外部是无法访问到它的,它是在实例化过程中自动调用的,且只调用一次。
  那么构造函数有什么用处呢?譬如在实例化一个人时候规定必须要给他起一个名字,那么就声明一个name属性,在构造函数中给它赋值,这样就可以在实例化过程保证必须给一个name的值才不会出错;但如果在构造函数中直接声明这个name属性的时候,则必须加上访问控制符。

class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

var p1 = new Person("Batman");
p1.getName();

var p2 = new Person("Superman");
p2.getName();

继承

  继承中涉及到两个关键字 extends、super。

extends
class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

class Employee extends Person { 
    code: string;
    work() { 

    }
}

var e1 = new Employee("Tony");
e1.getName();

  定义一个Employee类继承Person类,那么实例化Employee类之后,就可以使用Person类中的name属性和getName方法,并且他自己还可以新增属性和方法。

super

super关键字有两个用法。
(1)super调用父类构造函数
  如果Employee类中想要新增一个构造函数,是为了在实例化时候必须增添这个员工的工号,那么继承父类的构造函数时,必须要使用super关键字调用父类的构造函数。

class Person { 
    constructor(public name: string) { 

    }
    public getName() { 
        console.log(this.name);
    }
}

class Employee extends Person { 
    constructor(name: string, code: number) { 
        super(name);
        this.code = code;
    }

    code: number;
    work() { 

    }
}

var e1 = new Employee("Tony",1);
e1.getName();

(2)super调用父类其他方法

class Person { 
    constructor(public name: string) { 
        console.log("Hello!")
    }
    public eat() { 
        console.log("I'm eating.");
    }
}

class Employee extends Person { 
    constructor(name: string, code: number) { 
        super(name);
        console.log("Hi!");
        this.code = code;
    }

    code: number;
    work() { 
        super.eat();
        this.doWork();
    }
    private doWork() { 
        console.log("I'm working.");
    }
}

var e1 = new Employee("Tony",1);
e1.work();

猜你喜欢

转载自blog.csdn.net/bertZuo/article/details/86578419
今日推荐