---恢复内容开始---

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

js的面向对象

  1.类 具体相同的特征的一些对象的集合。

  2.对象 具体到某一个失误了都可以叫做对象。

  3.类  通过function 定义类  所以在js里类的本质是函数,

 类的标志   首字母大写     函数内部使用this  调用函数是使用new关键字

  1.类和函数天生有两个属性是prototype和__prototype__

    prototype又是一个对象天生有一个constructor的属性,属性势函数和类本身

  2.普通对象天生有一个__proto__的属性,这个属性是对象,指向他的父类。

原型链:当我们要使用方法时,首先看这个属性是不是私有的,私有的就直接使用,如果私有的属性没有,就找公有的,没有就按照__proto__找它的类上有没有,直到找到基类Object,如果Object。直到Object没有就undefined了。这种查找机制叫原型链。

  3.继承       <请翻阅之前的文章>

4.引用关系

  js面向对象和php面向对象的区别 随笔 第1张

  这两者的区别在于 :前者不会改变原有的引用关系,而后者会改变原有的引用关系

5.拷贝      同三

  php的面向对象

    1.类的创建   class创建类

js面向对象和php面向对象的区别 随笔 第2张

  2.对象的创建  使用new关键字

js面向对象和php面向对象的区别 随笔 第3张

  3.成员的添加

  添加成员需要    三个修饰符

    public   公开的       定义公共的属性和方法,类的外部,类的内部,子类都可以使用

    protected     受保护的    定义受保护的属性和方法    只能在类的内部和子类里使用

    private  私有的    定义私有的属性和方法        只能在自身的类里使用

    方法成员如果前面不加修饰符$      默认是public

  4.成员调用使用->符号

  js面向对象和php面向对象的区别 随笔 第4张

  使用成员属性和方法的时候,属性和方法前面不带$符

  js面向对象和php面向对象的区别 随笔 第5张

  5.特殊队形$this指向实例化的对象,如果类的方法里想使用类的其他属性和方法得需要使用$this对象

js面向对象和php面向对象的区别 随笔 第6张

  6.构造函数function__construct()构造函数在new实例化的时候系统会自动调用

js面向对象和php面向对象的区别 随笔 第7张

  7.析构方法

  我们每次new实例化,系统就会给这个对象分配一个内存空间,如果不销毁,系统压力会很大,系统有一个析构方法__destruct对象实例化之后系统会自动调用,内存销毁的原则是先进后销。

  js面向对象和php面向对象的区别 随笔 第8张

  8.成员赋值

  js面向对象和php面向对象的区别 随笔 第9张

  9.php中的继承使用关键字  extends

js面向对象和php面向对象的区别 随笔 第10张

 10.   类众常量    使用const关键字定义常量,常量在定义和使用的时候不能带$符。

  使用的时候不能带$this使用范围修饰符 ::  前面还是这个类名或self

js面向对象和php面向对象的区别 随笔 第11张

  如果子类访问父类的常量      使用parent::常量名

js面向对象和php面向对象的区别 随笔 第12张

js面向对象和php面向对象的区别 随笔 第13张

 

  11.静态变量    在变量前加上关键字static静态属性        不能使用->访问了,使用类名::$变量名;

js面向对象和php面向对象的区别 随笔 第14张

  12 重载  覆盖

  子类继承父类的方法时,如果子类有和父类同名的方法,从父类那继承的方法就会被覆盖掉,这个就叫重载。

  如果父类的方法前面加上final则子类无法重载父类的方法,就就会报错。

js面向对象和php面向对象的区别 随笔 第15张

13

js面向对象和php面向对象的区别 随笔 第16张

 类内部的对象$this和内存原理

$this他是一个对象 指向实力化的那个对象

js面向对象和php面向对象的区别 随笔 第17张

------------------------------------------------------------------------------------------------

当我们new实例化的时候,系统会给这个对象分配一个内存空间,内存空间分一个栈内存,一个堆内存,将变量存在栈里,将代码块存在堆里,然后将堆的内存地址指向栈中的变量,如果再给这个栈中的变量赋值引用数据类型,那么这个内存地址就会被更改。

js面向对象和php面向对象的区别 随笔 第18张

-----------------------------------------------------------------------------------------------

js面向对象和php面向对象的区别 随笔 第19张

变量a和变量p都指向同一个引用地址,二者是同一个对象,一变都变。思考:如果让二者是两个不同的对象,改变a但是p不跟着改变,需要使用对象克隆。clone

  通过关键字clone来复制一个一模一样的对象,但是而者不是同一个对象

js面向对象和php面向对象的区别 随笔 第20张

--------------------------------------------------------------------------------------------------------

静态成员

静态成员的添加

在成员属性     成员方法     前面加上static关键字就可以了

静态成员的访问

  第一中在类的内部方法中访问

js面向对象和php面向对象的区别 随笔 第21张

  在类的外部访问

js面向对象和php面向对象的区别 随笔 第22张

--------------------------------------------------------------------------------

面向对象的三大特征

封装:对外只告诉如何操作,内部结构不需要你知道。

对外只提供可操作的接口(方法), 对内的数据操作不可见

js面向对象和php面向对象的区别 随笔 第23张

继承

子类可以继承父类的属性和方法,但是有限继承,public、protected、private修饰的属性

可以继承protected public 修饰的方法   子类可以继承  父类的常量也可以继承。

js面向对象和php面向对象的区别 随笔 第24张

多态:php没有多态,因为php是弱类型语言,不会对变量提前进行类型声明,但是有重载

重载:父类和子类  方法相同 子类会覆盖父类的方法

---------------------------------------------------------------------------------------

关键字parent

  在继承中的子类,有这个parent。访问父类的常量,父类的方法,父类的静态属性,属性成员不能访问。

js面向对象和php面向对象的区别 随笔 第25张

10 abstract 代表抽象类

如果项目经理需要对所有的子类进行规范,就是说有些成员必须有,且必须使用那些名字。

就需要使用抽象类这个概念。

1.抽象类不能被实例化

2.如果一个类里面有一个方法被申明为抽象类了,这个类就得申明为抽象类

3.只要这个方法被声明为抽象方法了,就不能写函数体。将函数后面{}去掉,函数体由子类去实现

4.在继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。不是抽象方法子类可以不去定义

 js面向对象和php面向对象的区别 随笔 第26张

 

11.接口interface

接口的用途和抽象类差不多,都是为了写一些规范

  1. 使用interface关键字定义接口,接口在方法都是空的没有函数体。
  2. 接口中所有方法都是public
  3. 使用implements 这个操作符

4.一个类可以实现多个接口,接口和接口之间只要,隔开

5.接口和接口之间方法尽量不要重名,如果重名了,那么参数等要保持一致

 

 js面向对象和php面向对象的区别 随笔 第27张

 

抽象类和接口的区别

  1. 接口使用implements 而抽象类使用extends 实现
  2. 接口中只能申明公有的方法  抽象类属性  常量 方法 都可以申明
  3. 接口没有构造函数 抽象类有
  4. 接口可以实现多个接口 但是抽象类只能继承一个

 

---恢复内容结束---

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄