编程思想
面向过程编程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。
优点:性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程
缺点:不灵活、复用性较差
面向对象编程
特性:封装性 继承性 多态性
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低
构造函数
封装是面向对象思想中比较重要的一部分,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的原型链上
原型继承
继承是面向对象编程的另一个特征
利用原型链的特征,将构造函数的原型对象指向父级的实例对象