今天在看检测对象 私有属性时,有这样一个题
let arr=new Array();
arr.a=1;
arr._proto_.b=2;
arr.hasOwnProperty("a") //true
arr.hasOwnProperty("b") //false
这个题出现了_proto_,我就想起来自己原型链,尤其是构造函数、实例对象和原型对象三者之间的关系不是很懂,就写下这篇文章。
我们首先要知道:
一个需要共享并且通过实例对象调用的方法,是在构造函数的原型对象中的。(实例对象原型__proto__指向构造函数的原型,即prototype)
另外,要搞懂原型链,下面这句话很值得反复去读:
“每个构造函数都有一个原型对象, 原型对象都包含一个指向构造函数的指针, 实例都包含一个指向原型对象的内部指针。”
——此段话摘自《JavaScript高级程序设计》
下面是解析
每个构造函数本身都是一个对象,它有一个属性叫做prototype,它是一个对象。
每个构造函数的prototype属性都是个对象,这个对象都有一个属性constructor,它是个指针,并且指向构造函数本身。
实例都有一个属性叫做_proto_
,它是个指针,指向原型对象。