构造函数
- 当我们要需要多个相同的属性不同值的对象时 我们一个一个写的话太麻烦了 这个时候我们就可以给通过构造函数来进行实现(构造函数就像是一个模板)
构造函数:
如:
function Fun(name age){
this.name = name
this.age = age
}
构造函数的特点:
1. 函数名都是大写开头
2. 里面存在多个 this.属性 = 属性值 这种格式的键值对 这些都叫做构造函数的初始值
普通函数与构造函数:
两种函数的本质都是函数 都可以正常调用 他们也都有原型对象
我们在创建实例化对象的时候只能得到 this.属性 = 属性值 创建出来的键值对
为了区分他们 我们还是按照书写的格式来这样进行区分
实例化对象
实例化是指基于构造构造函数new出来的一个新对象
如: var box = new Fun(实参1,实参2,)
此时这里基于上面的构造函数Fun new 出来的一个对象 叫实例化对象 box里面就储存着和Fun里的name 和 age 两个键值对 里面的值我们可以通过传参的形式来进项改变 在new的过程中实例化对象只能得到 this.属性名=属性值 这种形式的键值对
在new的过程中发生了啥?
- 通过new关键字 创建一个新的空间
- this谁调用指向谁 在这里是new出来的实例化空间调用这个函数 所以此时的this指向指向了这个空的实例化对象
- 执行构造函数里面的代码 得到新的属性和方法
- 返回实例化对象 (当调用执行完后将得到的实例化对象返回box里面)
重理解上来说就是在new的后执行了构造函数里面所有的代码 执行完毕后将 有this指向的属性并得到的赋值的键值对返回 从而得到一个新的对象就叫实例化对象 就好像构造函数是一个功能 在我们通过关键之new调用的时候 构造函数将执行的后得到一个成品 最后将这个成品返回
原型对象:
原型对象时在每一个函数或构造函数生成时自动生成的一个方法 我们可一个通过
函数名.prototype 方法进行访问
如:
function fun (){
var num = 3
console.log(num);
}
console.log(fun.prototype);
//访问创建fun函数自动生成的原型对象
在这里普通函数也有原型对象构造函数也是这样访问
原型对象里面一个有两个方法:
1. constructor 指向生成它的函数体fun
2. __proto__ 指向构造构造出fun这个函数的原型对象
由此可见我们在生成函数的时候其实就是通过一个构造函数new出来的 只是这个构造函数在底层我们看不见