构造函数是一种特殊的函数,主要用来初始化 对象,即为对象成员变量赋初始值,它总与new一起使用,我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
new 在执行时会做四件事情
1.在内存中创建一个新的空对象。
2.让this指向这个新的对象。
3.执行构造函数里面的代码,给这个新对象添加属性和方法。
4.返回这个新对象(所以构造函数里面不需要return)
对象原型__proto__
对象都会有一个属性_proto_指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在。
- __proto__对象原型和原型对象prototype是等价的
- __proto__对象原型的意义就在于为对象的查找机制提供了一个方向,或者一条路线,但是它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
constructor构造函数
对象原型(_proto_)和构造函数(prototype原型对象里面都有一个属性constructor属性,constructor我们称为构造函数,因为它指向构造函数本身。 constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数。
构造函数、实例、原型对象三者之间的关系
原型链
JavaScript的成员查找机制(规则
1.当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
2.如果没有就查找它的原型(也就是__proto__指向的prototype原型对象)。
3.如果还没有就查找原型对象的原型(Object的原型对象)。
4.以此类推一直找到Object为止(null).
5._proto__对象原型的意义就在于为对象成员查找机制提供了一个方向,或者说一条路线。