面向对象的理解
1、JS中的对象就是一个个的工具包,而函数就是工具
2、在使用对象时,我们只需要关心工具包需要实现什么功能,而不需要关心工具是怎么实现的
3、面向对象的特点:
a.封装性
b.继承
c.多态
4、对象是一个抽象的概念,我们如果需要使用对象必须对它进行实例化
5、创建对象的方式:
a.构造函数创建对象:自定义一个函数来定义产品的属性和方法,缺点是不同的实例可能有些方法是相同的,每次实例都会重新分配内存,造成内存浪费
b.原型创建对象:利用函数中的prototype属性定义产品的属性和方法,缺点是每个实例都有自己的属性,不能共享
c.混合创建对象:把不同实例的属性放在构造函数中,把相同的方法放在原型中,能有效解决上述缺点
d.工厂模式创建对象:我们可以把实例看做一个具体产品,产品创建交给工厂,我们直接使用这个产品就可以了
e.运用第三方的框架创建对象
6、面向对象的作用
a.封装框架
b.面向对象编程
c.描述数据
对JS中原型链的理解
1、通过原型创建对象,其实创建的是两个对象
--构造函数对象
--原型对象
2、当我们实例化的时候,该实例自动拷贝构造函数中的所有属性和方法,而对于原型对象,则不拷贝,而是通过原型链把原型中的方法和实例联系起来,这里就涉及到了属性搜索法则
3、如果实例需要某个属性或方法时,通过属性访问搜索法则的原理,首先遍历自己的属性,就是构造函数的属性,因为实例的属性本身就是通过构造函数拷贝过来的,如果找不到,就根据原型链依次遍历原型对象中的属性
对JS中继承的理解
编程世界的继承有两层含义:
1、拥有父类的属性和方法
- 一个对象继承了另一个对象,就拥有了另一个对象的所有属性和方法,就是前面提到的实例化某个对 象,通过构造函数和原型对象拥有了其中的属性和方法
- 继承的本质:通过__proto__指针指向某个对象,系统能够自动链式访问所指向的对象的属性和方法
2、拥有自己的属性和方法
通过第三方框架实现把自己的属性方在一个对象的属性中,公共的放在其他地方