JS面向对象
1.JS面向对象的含义:通过函数封装得到的有一个类(函数);
2.每个类(函数)天生有一个prototype的属性,这个prototype又是一个对象,这个对象里有个constructor(构造函数)的属性,属性值是类本身。
3.我们所有new 一个类的时候,其实是调用它的构造函数。构造函数里的属性都是私有的,构造函数里的this都是实例对象。
4.每个对象天生有一个__proto__,指向类的原型。
5.Prototype和__proto__
prototype是类的或者函数的,__proto__是对象的
Prototype是存储机制,程序员来实现。__proto__是查找机制(浏览器的)
6.原型链
首先定义一个对象,其次看这个对象的属性是否是私有的,是就直接使用,不是的就通过__proto__往他的类的prototype上查找,有就直接使用,没有就继续向上查找,直到查找到基类Object,没有就是undefined,有就直接使用。这种查找机制 叫原型链。
7.面向对象有三大特点 :封装 继承 多态
封装:把所有相关的属性和方法封装在一个对象里。
继承:自己没有的属性或者方法,把别人的拿来用。
多态:不同的对象根据事件情况,执行代码不同。
8.JS继承
1.原型继承:将父类的实例赋值给子类的原型私有的公有的都继承为公有的
2.call继承 call方法是 函数、类天生自带的一个方法,将父类私有的继承为子类私有的
3.冒充对象继承将父类私有的和公有的继承为子类私有的 使用for in
类:私有的
公有的
Fn.call(obj跟fn的参数匹配) 拿obj取代fn中的this然后调用fn
4.混合继承 私有的继承为私有的, 公有的即成为公有的 Call继承和原型继承的结合
5. 组合继承 私有继承为私有 公有继承为公有
私有继承为私有借助 call
公有继承为公有 不是原型赋值给原型
因为原型是对象是复合数据类型,复合数据类型是地址赋给了前者,导致二者指向同一个原型,得克隆)
Var obj2=object.create(obj1);
6.中间类继承
数组中的最小值
php面向对象
1.class面向对象的定义:是一种程序设计模式,简称oop
2.<1类 通过关键字 class 定义类 类名首字母要大写
<2对象 是类的实例 通过new 关键字 得到一个实例对象 new classname
<3通过访问修饰符 给类添加成员
Public 添加的成员是公有的,在类内 类外 子类 都可以去访问他
Protected 受保护的。 只能在类的里面和子类访问 类的外面不能访问
Private 私有的 只能在类的里面访问。
如果成员前面没有加修饰符 默认是public
<4实例对象使用 -> 访问类里面的成员
对象->属性的时候 属性前面不加$符。
构造函数 constructor
New 实例对象的本质 其实就是调用对应类的构造函数。
$this 是类的实例对象
析够函数
我们new 实例的时候其实是调用构造函数,函数调用的时候会开辟内存空间,调用完之后会自动销毁。销毁前会自动调用 __destruct 这个析构方法
继承extends
子类继承父类 使用extends 关键字 子类继承父类中属性和方法。
子类继承父类的属性和方法是有限继承。
Public public修饰的属性和方法 子类都可以继承
Protected protected修饰的属性和方法 子类都可以继承
Pravite pravite 修饰的属性子类可以继承 private修饰的方法子类不可以继承
3.面向对象的三大特征
1.封装
将数据和操作数据的方法捆绑在一起,对外隐藏,只提供操作的接口
2.继承
子类继承父类中的属性和方法
3.多态
PHP是弱类型语言没有多态这个概念,有重载
子类和父类的方法名相同,子类会覆盖父类的方法叫做重载
多态是强类型语言才有的