类的相关概念
- 类:定义了一个事物的抽象特点,包含他的属性和方法
- 对象:类的实例,通过new生成
- 面向对象的三大特点:封装、继承、多态
- 修饰符:修饰符是一些关键字,用来限定成员或类型的性质,比如public表示公有属性和方法
ES6中类的用法
属性和方法
使用 class
定义类,使用 constructor
定义构造函数。
通过 new
生成新实例的时候,会自动调用构造函数。
class Person {
public name;
constructor(name) {
this.name = name;
}
sayHi() {
return `My name is ${this.name}`;
}
}
let a = new Animal('ben');
console.log(a.sayHi()); // My name is ben
类的继承
使用 extends
关键字实现继承,子类中使用 super
关键字来调用父类的构造函数和方法。
class Chinese extends Person{
constructor(name) {
super(name); // 调用父类的 constructor(name)
console.log(this.name);
}
sayHi() {
return 'Meow, ' + super.sayHi(); // 调用父类的 sayHi()
}
}
let c = new Chinese ('Zhang'); //
console.log(c.sayHi()); // Meow, My name is Zhang
ts中类的用法
ts可以使用三种访问修饰符,分别是public,private,protected
- public修饰的属性和方法是私有的,可以在任何地方访问到。
- private修饰的属性和方法是私有的,不能在声明他的类的外部进行访问
- protected中的属性和方法是受保护的,他和private的区别在于他在子类中是允许访问的。
在上面的例子中,name的属性被设置为了public,所以直接访问实例的name属性时允许的
很多时候,我们希望有的属性是无法直接存取的,这时候可以使用private。
class Person{
public name;
private constructor(name) {
this.name = name;
}
}
class Cat extends Animal {
constructor(name) {
super(name);
}
}
let a = new Person('Jack');//报错,当构造函数修饰为 private 时,该类不允许被继承或者实例化:
当构造函数修饰为 protected
时,该类只允许被继承:
class Person{
public name;
protected constructor(name) {
this.name = name;
}
}
class Cat extends Animal {
constructor(name) {
super(name);
}
}
let a = new Person('Jack');