TypeScript 类中的访问类型和构造器
访问类型有 private, protected, public
class Person { name: string; public sayHi() { console.log(this.name); // 类内调用 } } class Teacher extends Person{ public sayBye() { this.name; } } const person = new Person(); person.name = 'zina'; console.log(person.name); // 类外调用 person.sayHi(); // 类外调用
这里可以对属性进行赋值和取值,是因为类中属性方法默认是 public
* public: 允许我在类对内外被调用
* private: 允许我在类内被使用
* protected: 允许在类内及继承的子类中使用
class Person { public name: string; constructor(name: string){ // 调用的时候自动执行 this.name = name; } } const person = new Person('zina'); console.log(person.name); // 想给属性赋值的时候,比较传统的写法是先定义一个 name 属性 // 然后在构造器里面赋值,有没有更简单的方法,是有的 class Person1 { // 调用的时候自动执行 constructor(public name: string){} } const person1 = new Person1('zina'); console.log(person.name); // 在参数前加一个访问类型,加一个 public ,等同于定义一个 name 并赋值 class Person2 { constructor(public name: string){} } class Teacher extends Person2{ /** * 子类定义了一个age,在创建的时候也传递了,还是会报错,因为继承了 Person2 * @param age */ // constructor(public age:number){} constructor(public age:number){ super('zina'); // 如果子类有构造器,父类也有构造器,这个时候子类就一定要手动的调用下父类的构造器 } } const teacher = new Teacher(28); console.log(teacher.name, teacher.age)
总结:
1、访问类型:
* public: 允许我在类对内外被调用
* private: 允许我在类内被使用
* protected: 允许在类内及继承的子类中使用
2、
class Person1 { constructor(public name: string){} // 自动执行 } // 等同于 class Person { public name: string; constructor(name: string){ // 自动执行 this.name = name; } }
3、super
如果子类有构造器,这个时候子类就一定要手动的调用下父类的构造器,super()