JS 面向对象 封装只体现public、private 实现原型继承prototype 对象访问成员的类型及优先级 对象遍历 复制继承 静态成员

三大特性:封装、继承、多态
1.封装特性
在php里边,通过给成员声明关键字体现封装:public protected private
php中有2种方式访问私有成员属性private:
A.定义一个公开方法
B.通过魔术方法__get()

在javascript里边,封装只体现public、private
①public公开的,在构造函数里边通过this关键字声明的成员都是公开的,函数内部、外部都可以调用
②private私有的,在构造函数里边声明局部变量,就是私有成员,要和静态成员进行区分

构造函数内部声明的局部变量就是私有成员:
在这里插入图片描述
2.继承特性
在这里插入图片描述
2.1 原型继承介绍
php里边:一个类去继承另一个类,继承类实例化对象也会拥有被继承类的成员
javascript里边:(构造)函数可以继承另外一个对象,构造函数实例化出来的对象除了拥有本身成员还拥有被继承对象的成员。
原型继承关键字:prototype。
2.2 实现原型继承
函数.prototype.成员名称 = 值; //继承单一成员
函数.prototype = 对象; //继承一个对象
在这里插入图片描述
单一成员继承:
在这里插入图片描述
2.3 原型继承注意
① 对象 和 单一成员同时继承,需要先继承对象、再继承成员
② 多个对象 同时继承,最后对象起作用
③ 继承成员名称 与 本身成员名称一致,体现本身成员结果
多个对象同时继承,后者覆盖前者
在这里插入图片描述
对象和成员同时继承,先继承对象、再继承成员
在这里插入图片描述
3.对象访问成员的类型及优先级
对象访问成员类型一共四种,如下图,从上往下优先级依次提高:
在这里插入图片描述
4. 原型链
什么是原型链:
构造函数 继承 一个对象
继承对象也有构造函数,其构造函数还去继承其他对象
其他对象也有构造函数,构造函数还去继承其他对象
其他对象也有构造函数,构造函数还去继承其他对象
如此反复。。。。。
形成了一个继承的链条,称为”原型链”,原型链的顶端是Object
在这里插入图片描述
在这里插入图片描述
对象访问一个成员顺序:
① 对象本身获取
② 对象构造函数里边获取
③ 构造函数继承对象本身获取
④ 构造函数继承对象的构造函数里边获取
构造函数继承对象构造函数继承对象的本身获取
构造函数继承对象构造函数继承对象的构造函数里边获取
。。。。。。
直到找到Object成员为止。
有的时候对象访问一个成员,我们本身并没有定义这个成员,其就会通过原型链找到顶端Object的成员进行访问。
例如constructor、hasOwnPrototype、isPrototypeOf等等都是原型链顶端Object的成员。
5. 对象遍历及成员属组判断
for-in
for(var 成员变量 in 对象){}
在这里插入图片描述
6.原型衍生继承-复制继承
特点(优势):
① 允许同时继承多个对象
② 非常灵活,可以根据实际需要为每个对象复制不同的成员
(之前的原型继承,继承成员无论是否使用都继承给每个对象)
jquery框架里边大量使用复制继承
在这里插入图片描述
7. 静态成员
如果一个类里边,有这样的属性,其值不随便发生变化,全部对象都共用一个值,该属性就声明为static静态的,其在内存中无论创建多少个对象(或者说其与具体对象无关)都只占据一份空间。
在这里插入图片描述
为什么使用静态成员
① 静态成员归属到类本身,可以明显的加快访问速度(不需要实例化对象,通过类进行访问)。
② 节省内存
一个类,每实例化一个对象,在堆空间都要给每个成员分配内存空间,如果有一个成员$country无论创建多少个对象其的信息值也不发生变化,为了节省内存空间的使用,就把这样的成员设置为“静态成员”。其在内存中就只占据一份内存空间。

静态成员在php里边需要通过 类名::静态成员 直接访问(普通对象也可以调用静态成员 $对象->静态成员)
那么在javascript里边如果一个成员是通过(构造)函数直接调用的,就称其为“静态成员”。要和私有成员进行区分
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37171379/article/details/88902247
今日推荐