每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
构造函数
1.创建特定类型的对象
2.原生构造函数:Object、Array
3.自定义构造函数,创建自定义对象类型
构造函数与函数区别
调用方式不同,只要用new操作符调用就可作为构造函数,不用new跟别的函数一样
原型
构造函数
每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象是原型对象。
所有原型对象会自动获得一个constructor属性,这个属性包含一个指针,指向构造函数(prototype属性所在的函数)
构造函数创建实例
prototype是通过调用该构造函数创建的对象实例的原型对象。
所有对象实例共享原型对象的属性和方法
调用构造函数用new操作符创建一个新的实例后,该实例内部包含一个内部属性【Prototype】,该属性指向构造函数的原型对象。
连接存在实例与构造的原型对象之间,不存在实例与构造函数之间
对象属性查找
访问某个对象的属性时,首先从对象实例开始查找,没有找到的话,搜索指针执行的原型对象
向对象实例中添加与原型对象同名的属性,会覆盖原型对象的同名属性,但不会修改。
一个属性在对象实例中,hasOwnProperty返回true
对象能够访问某个属性,in操作符返回true,无论在原型上还是 实例上
原型链
假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。这就是所谓原型链的基本概念。