面向对象

120 阅读3分钟

编程思想

面向过程编程

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

优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程

缺点:不灵活、复用性较差

面向对象编程

特性:封装性 继承性 多态性

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

缺点:性能比面向过程低

构造函数

封装是面向对象思想中比较重要的一部分,js面向对象可以通过构造函数实现的封装。

构造函数很好用,但是存在浪费的问题

总结:构造函数的问题:如果使用构造函数添加方法,则会产生

原型

原型对象

JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象

使用场景: 可以解决构造函数封装时函数(方法)多次创建,占用内存问题

这个对象可以挂载函数,对象实例化不会多次创建原型上函数,节约内存

特点:1.所有的构造函数都有一个prototype属性 他就是原型对象

2.所有通过构造函数创建的对象 都可以访问原型对象中的成员(属性和方法)

结论:1.将来构造函数中想给对象添加方法,就将方法放到原型对象上

2.公共的属性也可以放到原型上

实例对象可以直接访问原型对象中函数

原型- this指向

构造函数和原型对象中的this 都指向 实例化的对象

一般原型对象上面的函数都不会使用箭头函数,因为可能要用到this (会指向window)

constructor 属性

作用:该属性指向该原型对象的构造函数. 简单理解,就是指向我的爸爸,我是有爸爸的孩子

构造函数里有prototype 是原型对象

原型对象中有constructor 是构造函数

他俩互相引用,让原型对象知道自己是属于哪个构造函数的原型对象

原型

对象都会有一个属性 下划线下划线proto下划线下划线 (__ proto __)

为了方便使用 在控制台中显示[[prototype]] 不要去修改这个属性 否则会对性能超声影响

原型链

构造函数 原型对象 实例对象 三者形参三角关系

由于原型对象也是对象,所以也有其构造函数,所以三角关系可以继续往上延续,整个链条就是原型链

__ proto __属性链状结构成为原型链

原型链查找规则

就近原则:自己身上有的就用自己的, 没有的话就找原型对象, 逐层查找, 直到 null 为止

instanceof 运算符

用于做类型判断

检测对象的具体类型,通过哪个构造函数创建的

A instanceof B 原理:判断B是否在A的原型链上

原型继承

继承是面向对象编程的另一个特征

利用原型链的特征,将构造函数的原型对象指向父级的实例对象