AI智能
改变未来

js 面向对象的三大特征(全)


一:面向对象的三大特征

1.什么是面向对象

把客观对象抽象成属性数据和对数据的相关操作,把内部细节和不想关的信息隐藏起来,把同一个类型的客观对象的属性数据和操作绑定在一起,封装成类,并且允许分成不同层次进行抽象,通过继承实现属性和操作的共享。

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

它有三大特征分别为:封装,继承和多态:

1:封装

把数据封装起来,减少耦合,不该外部访问的不要让外部访问。利于数据的接口权限管理,ES6 目前不支持,一般认为_开头的都会私有的,不要使用。

我们平时所用的方法和类都是一种封装,当我们在项目开发中,遇到一段功能的代码在好多地方重复使用的时候,我们可以把他单独封装成一个功能的方法,这样在我们需要使用的地方直接调用就可以了。

2:继承

子类继承父类,继承可以把公共方法抽离出来,提高复用,减少冗余。

继承在我们的项目开发中主要使用为子类继承父类,下面是es6继承的书写方法

class Father {   constructor(name) {this._name = name;}   //实例方法,通过实例对象调用getName() {console.log(this._name);}   // 静态方法不会被继承,并且是通过类名去调用的   static hitXiaoMing() {console.log(\"打小明\")}}class Son extends Father {constructor(name, age) {//实例化子类的时候把子类的数据传给父类(这里的super必须有,super里的参数是所继承的父类实例化所需要的数据)super(name);this._age = age;} }var DaMing = new Father(\'大明\');Father.hitXiaoMing(); //打小明DaMing.getName(); //大明var XiaoMing = new Son(\'小明\',15);XiaoMing.getName(); //小明

特别提醒:继承会继承父类的实例属性和实例方法,并不会继承静态属性和静态方法,并且静态方法只能通过类名去调用。

三:多态

多态的具体表现为方法重载和方法重写:

方法重载:重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数

方法重写:重写(也叫覆盖)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样

下面我们根据上面的例子在添加一个work的方法说明一下方法重写:

class Father {   constructor(name) {this._name = name;}   //实例方法,通过实例对象调用getName() {console.log(this._name);}work() {  console.log(\'我的工作是累死累活,赚钱养家\')}   // 静态方法不会被继承,并且是通过类名去调用的   static hitXiaoMing() {console.log(\"打小明\")}}class Son extends Father {constructor(name, age) {//实例化子类的时候把子类的数据传给父类(这里的super必须有,super里的参数是所继承的父类实例化所需要的数据)super(name);this._age = age;}work() {  console.log(\'我的工作是好好学习,天天向上。\')}}var DaMing = new Father(\'大明\');DaMing.work() // 我的工作是累死累活,赚钱养家。var XiaoMing = new Son(\'小明\',15);XiaoMing.work(); // 我的工作是好好学习,天天向上。

以上我们重写了父类的work()方法。

三大特征的优点:

封装:封装的优势在于定义只可以在类内部进行对属性的操作,外部无法对这些属性指手画脚,要想修改,也只能通过你定义的封装方法;

继承:继承减少了代码的冗余,省略了很多重复代码,开发者可以从父类底层定义所有子类必须有的属性和方法,以达到耦合的目的;

多态:多态实现了方法的个性化,不同的子类根据具体状况可以实现不同的方法,光有父类定义的方法不够灵活,遇见特殊状况就捉襟见肘了

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » js 面向对象的三大特征(全)