构造函数
什么是构造函数
在javaScript中,用new关键字来调用的函数,称为构造函数。一般将构造函数的首字母大写。
什么时候使用构造函数
在创建大量拥有相同特性(属性)和行为(方法)的对象时,我们可以使用构造函数实现代码的复用。
构造函数的执行过程
- 在使用new关键字调用时,会创建一个新的内存空间,标记为类的实例
- 函数体内部的this指向该内存
- 执行函数体内的代码
- 默认返回this
原型与原型链
首先我们需要知道三个关键的属性,prototype,__ proto __ ,constructor
prototype
我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象(函数的原型对象),这个对象的用途是包含可以由特定类型的的所有实例共享的属性和方法。并且prototype是一个对象数据类型的值。如果按字面意思理解,prototype就是通过调用构造函数而创建的对象实例的原型对象。
__ proto __
这是每一个JavaScript对象(除了 null )都具有的一个属性,叫proto,这个属性会指向该对象的原型。
constructor
原型对象中有一个属性constructor,它指向原来的函数对象
三者关系如下
原型链
原型链指的是一个实例对象,在调用属性和方法时会一次在实例本身,构造函数原型,构造函数原型的原型上去寻找,查找是否有对应的属性或方法,一直找到Object.prototype,如果还没有则返回null。其中__ proto__像链一样,串联起实例对象和原型。
值得注意的是原型链的真正形成靠的是__ proto__ ,而不是prototype。并且__ proto__ 指向的是构造函数的原型,而不是构造函数本身。