面向对象
面向过程:关注的是具体实现的过程 面向对象:关注的是特征(具有的特征),注意:面向对象不是没有过程,而是不关注过程。
面向对象的一些个人呢的理解:面向对象需要用到构造函数 在构造函数中将 公用的方法剥离 出来存放在 函数的 prototype 这个 对象中 。方便以后调用。
/** 在js中,对象的创建有两种方式* 1. new Object()* 2. {}* 通过上述的两种方式,都可以创建一个空的对象 * */ 若创建一个构造函数 function (所谓构造函数就是通过new function()的 方法来获取)
对new方法的解释
new: 运算符 通过new运算符运算函数(该函数称之为构造函数),会得到一个对象的结果new只能和函数配合使用 当我们通过new的方式去执行一个函数时
1.会在该函数内部创建一个空的对象
2.函数中的this是指向该对象
3.函数执行完成之后自动返回该对象
当我们通过new方法调用执行一个函数时,返回值:?
1.若函数中没有return 返回内部创建的空对象
2.如果有return(但return返回的不是一个对象的话) 返回内部创建的空对象
3.return的是对象 返回的就是return的对象
返回总结:无论是否有return 当我们通过new的方法去调用一个函数时该函数一定会返回一个对象,通过new 方法来执行函数就是来创建对象的。
我们将new执行的函数称之为:构造函数 构造函数和普通函数的区别就是是否使用new方法来执行,为了和普通函数进行区分,通常情况下对构造函数使用驼峰命名。
构造函数 <-> 类
* 类:类型,对具有相同特征的对象的抽象描述
* 对象:由类创建出来的具体对象(实例),也称为实例化对象
* 构造函数:类中用来创建对象的具体函数,类创建对象的时候调用的初始化函数 *
* 通过Teacher构造函数创建出来了下面两个对象
* 这两个对象都拥有相同的特征,不同的对象相同的特征也会有不同的值,每一个对象都拥有属于自己的特征值
* 但是有时候,对象的一些特征所拥有的值其实也是一样,那么如果每个对象对这样的相同值的特征也是独立保存一份的话,
就会照成资源浪费(内存占用),所以我们需要去优化这个问题
构造函数+原型
为了使对象共有的特征方法维护和管理,所以有一种专门来管理和维护这些共同特征的方法(手段) *
* 当一个函数被创建的时候,该函数下自动会有一些属性(函数也是对象),其中有一个属性,名称:prototype,他的值是一个对象,我们通常就把构造函数创建的对象所拥有的共同特征保存在这些对象的构造函数的prototype属性下 *
* 当一个对象被创建的时候,对象自动会创建一个属性,名称:__proto__,该属性也是一个对象,其实该属性就是该对象的构造函数的prototype *
* 当我们去调用一个对象下的属性或方法的时候,对象首先会在自身上查找是否该属性或方法,如果有则调用,如果没有,则会查找自己的__proto__属性上是否有给属性或方法 *
* *
总结: * 我们通常把对象私有属性或方法放置在每个对象自身上 * 我们通常把对象公有(共有)的属性或方法放置在这些对象的构造函数的原型下 * * 构造函数+原型