按自己的理解,简要整理一下JS中原型链的相关知识。
1.什么是原型
在 JavaScript 中,每当定义一个对象的时候,对象中都会包含一些预定义的属性。
如现在声明一个number类的对象
var n1=new Number(1)
n1.toString()//"1"
但是我们打印有关n1的相关信息时,发现我们根本没有定义对象的toString属性。继续点开__proto__属性,找到了我们希望看见的toString属性。
这个__proto__属性实际上是一个对象,也可以说是原型。
2.什么是原型链
继续检查打印出的信息,我们发现在n1.__proto__属性中还有一个__proto__属性,
比如这时我们需要hasOwnProperty属性,当在前一级原型中没有找到时,JS引擎会继续沿着__proto__属性搜索下去,直到找到需要的属性。实际上对于刚才声明的变量,当搜索到n1.proto.__proto__时,它的下一级__proto__属性的值为null,也说明这条原型链的结束。
而这个「搜索过程」,是沿着由 proto 组成的链子一直走的。这个链子就是原型链。
3. 声明一个对象后,js引擎做了什么
- 声明一个哈希
- 让__proto__属性指向正确的共有属性(原型)
4. prototype与__proto__
在上面两幅图中,存在这样的等式
n1.__proto__===Number.prototype//true
n1.__proto__.__proto__===Object.prototype//true
也就是
var 对象=new 函数()
对象.__proto__===函数.prototype
后续知识待学习补充,此文章为番茄小火锅的原创文章,版权归饥人谷和本人所有,转载请注明出处,抄袭必究。