面向对象及TS访问修饰符!!!

66 阅读2分钟

面向对象是什么

面向对象就是把客观对象抽象成属性数据和动作数据的相关行为动作(方法),将同一个类型的客观对象的属性数据和操作封装在一起,把内部细节和不相关的数据隐藏。

现在有一个Person类,我们将人的共有年龄、体重等称之为属性,将等称之为行为动作

class Person {
  constructor(age) {
    this.age = age; //  属性数据
  }
  
  eat() { // 行为动作
    // todo ...
  }
}

const person = new Person('women')

允许分成不同维度进行抽象,通过继承的方式实现属性和动作的共享,一般会按照三个维度进行抽象:面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)

子类可以继承父类的公共属性和动作,将公共的动作进行抽离出来,可以很好的提高代码复用性,减少冗余

下面有一个women和men类,都继承自Person,那么women和men都会继承父类的age属性和eat方法

  constructor(name) {
    this.name = name; //  属性数据
  }
  
  hobby() { // 行为动作
    // todo ...
  }
}

class Men extends Person {
  constructor(name) {
    this.name = name; //  属性数据
  }
  
  hobby() { // 行为动作
    // todo ...
  }
}

const women = new Woen('小红')
const men = new Men('小明')

封装对象

面向对象的核心就是如何将数据和行为进行抽封装,封装的优势

  1. 为了减少对象之间的耦合,需要将内部私有的和外部可以访问的进行区分,比如人总有一些个人的隐私是不期望外人知道,有些信息是公开的
  2. 利于数据的接口权限管理,可以针对数据的修饰符来决定其访问权限,目前私有属性一般都是以_开头

ES6提供了几个权限修饰符

  • public:默认修饰符,公有修饰符,可以在类内或者类外使用其修饰属性或者行为
  • private:私有修饰符,只可以在当前类内使用其修饰属性和方法
  • protected:受保护修饰符,可以在本类和子类中使用其修饰属性或者行为

下面例子配合修饰符将Person进行封装

  public name;
  private age;
	protected hobby;
  
  constructor(name, age, hobby) {
		this.name = name; // 公有
    this.age = age; // 私有
    this.hobby = hobby; // 受保护
  }
  
  public eat() { // 行为动作
    // todo ...
  }
}

const  person = new Person('张三', 18, ['皮蛋拍黄瓜'])