这样回答原型和原型链

884 阅读2分钟
  1. 什么是原型?
  2. 什么是原型链?

面试官大多会这样问你说一下原型和原型量?

1、什么是原型

我会这样回答:
说到原型链就要提到三个属性,proto prototype constructor。
1、proto 和 constructor是对象独有的属性。但proto不是对象自身的属性,而是Object.prototype上的访问器。
2**、prototype是函数特有的属性**,在js中函数也是对象,因此函数也有__proto__和constructor属性
(这两句话的总结尤为重要,接下就具体解释每个属性的作用及关联关系)


proto是对象独有的属性
此处举个栗子。
function Person(){} var p = new Person()
此时在控制台输出p,会看到含有proto属性(当然也有constructor),这个_ _ proto _ _属性将p对象指向另一个对象Object,即指向它的原型对象。
prototype是函数特有的属性
这个属性是函数所独有的。Person构造函数通过prototype属性指向一个对象,这个对象就是函数的原型对象
constructor是对象的属性
constructor指向对象的构造函数。

中间关系同下图所示:

image.png

2、什么是原型链?

当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存在这个属性,则继续往父对象的__proto__属性所指向的那个对象(可以理解为爷爷对象)里找,如果还没找到,则继续往上找…直到原型链顶端null(可以理解为原始人。。。),再往上找就相当于在null上取值,会报错(可以理解为,再往上就已经不是“人”的范畴了,找不到了,到此结束,null为原型链的终点),由以上这种通过__proto__属性来连接对象直到null的一条链即为我们所谓的原型链。   其实我们平时调用的字符串方法、数组方法、对象方法、函数方法等都是靠__proto__继承而来的。

原文链接:blog.csdn.net/cc188688768…