Js是基于对象还是面向对象的

Js是基于对象还是面向对象的

    • 一、什么叫做面向对象
    • 二、什么叫做基于对象
    • 三: Js的特性
    • 四:js通过原型链等来模拟出和面向对象很类似的功能。
    • 五:总结

一、什么叫做面向对象

面向对象的三大特点(封装,继承,多态)缺一不可。

  1. 所谓封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
    面向对象语言如何实现封装:java提供了四种控制修饰符控制方法和变量访问的权限:
    1.public:对外公开
    2.protected:对子类和同一包中的类公开
    3.没有修饰符号,向同一个包的类公开
    4.private:只有类本身可以访问,不对外公开

  2. 所谓继承:是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

使用“继承”的extends实现继承:

class 父类 { }
class 子类 extends 父类 { }

使用“继承”的implements实现继承:

public interface A { public void eat(); public void sleep(); } 
public interface B { public void show(); } 
public class C implements A,B { }	

使用“组合”实现继承:

class Heart{    public void beat(){ System.out.println("心跳");}}
class Dog{
    Heart heart = new Heart();//成员变量即初始化对象
    public void run(){ System.out.println("跑");}
}
  1. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多态存在的三个必要条件:继承,重写,父类引用指向子类对象
    Parent p = new Child();

二、什么叫做基于对象

和面向对象不是一个概念,不提供抽象、继承、重载等有关面向对象语言的功能。而是把其它语言所创建的复杂对象统一起来,从而形成一个非常强大的对象系统,以供使用。

三: Js的特性

既然基于对象不提供重载的功能,而面向对象是支持重载的,那我们就看看写两个js的同名函数,支不支持函数重载
Js是基于对象还是面向对象的_第1张图片
上图左侧写了两个同名,参数个数不同的两个函数,右侧为输出结果:NaN 6;这说明前一个同名函数被覆盖掉了,所以,js是不支持重载的,所以,js不是面向对象语言。

四:js通过原型链等来模拟出和面向对象很类似的功能。

  1. Js实现重载 参考 https://blog.csdn.net/XinYe666666/article/details/81178282
    Js是基于对象还是面向对象的_第2张图片
  2. Js实现封装 参考:https://blog.csdn.net/qq_22896159/article/details/81779667
    Js是基于对象还是面向对象的_第3张图片
  3. Js实现继承
    Js是基于对象还是面向对象的_第4张图片
    运行结果:
    Js是基于对象还是面向对象的_第5张图片
  4. Js实现多态
    Js是基于对象还是面向对象的_第6张图片
    运行结果:
    js实现多态运行结果

五:总结

js不是面向对象的,它是基于对象的,但它可以通过原型链等等来模拟出和面向对象很类似的功能。

你可能感兴趣的:(前端)