- 面向过程:关注的是具体实现的过程
- 面向对象:关注的是特征(具有的特性),注意:面向对象不是没有过程,而是不关注过程
对象的创建
在JS中对象的创建有两种方式
- new Object()
- {}
通过上述的两种方式,都已创建一个空的对象
我们通过在一个空的对象上添加特征来扩展我们想要的对象
在实际开发中,我们很可能会创建很多相同特征(类型)的对象,那么我们会把创建相同特征的对象的过程进行封装
new
运算符
通过new运算符运算的函数,会得到一个对象的结果
new 只能和函数配合使用
通过new来执行一个函数的时候,如果该函数不需要传入任何参数,我们可以省略(),如果不传入参数,()也可以不带
new fn:在函数内部自动创建一个对象,并且this自动指向这个对象
-
当我们通过new的方式去调用执行一个函数的时候
- 在函数内部自动创建一个空的对象
- 被该函数的this指向该对象
- 函数执行完成自动返回该对象
-
当我们通过new的方式去调用执行一个函数的时候,返回
- 如果没有return,返回内部创建的空对象
- 如果有return
- return的是非对象,返回内部创建的空对象
- return的是对象,返回的就是return的对象
-
返回总结:
- 无论是否有return,当我们通过new的方式去调用一个函数的时候,该函数一定会返回对象
- 如果有return返回对象,则优先返回return的对象
通过new可以得到的对象,通过new执行函数就是用来创建对象的
-
我们把new执行的函数称为:构造函数
- 构造函数与普通函数的区别就是是否用new来执行
- 为了和普通函数做个区分,通常情况下,我们会把即将作为构造函数的函数使用大驼峰来命名
构造函数 < - > 类
类:类型,对具有相同特征的对象的抽象描述
对象:由类创建出来的具体对象(实例),也称为实例对象
构造函数:类中用来创建对象的具体函数,类创建对象,类创建函数的时候调用的原型
- 有时候,对象的一些特征所拥有的值也是一样的,那么如果每个对象对这样的相同值得特征也是独立保存一份的话,就会赵成资源浪费(内存占用),所以我们要去优化
原型
- 为了使对象共有的特征方便维护和管理,所以有一种专门来管理和维护这些共同的特征的方法(手段)
- 当一个函数被创建的时候,该函数下自动会有一个属性,其中一个属性交prototype,他的值是一个对象,我们通常酒吧构造函数创建的对象所拥有的共同特征保存在这些对象的prototype属性中
- 当一个对象呗创建的时候,对象自动回创建一个属性,名称:proto,该属性也是一个对象,其实该属性就是他的构造函数的prototype属性
- 对象的proto属性指向的位置,和 构造函数的prototype属性指向的位置相同
- 当我们去调用一个对象下的属性或方法的时候,对象首先会在自身上查找是否该属性或方法,如果有则调用,如果没有,则会查找自己的proto属相上是否有这个属性或方法
总结
- 我们通常把对象私有属性或方法放置在每个对象自身上
- 我们通常把对象共有的属性或方法放置在这些对象的构造函数的原型下
- 构造函数+原型