(自用面试题)原型、原型链是什么?

81 阅读1分钟

背景:
JavaScript常被描述为一种基于原型的语言(每个对象拥有一个原型对象)。当试图访问一个对象的属性和方法时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。准确地说,这些属性和方法定义在Object的构造器函数(constructor functions)的prototype属性上,而非实例对象本身。

原型

原型全称为原型对象,即prototype。JS规定,每一个构造函数都有一个prototype属性,它是一个对象,我们把公共的属性和方法直接定义在原型对象上,这样所有构造函数对象的实例就可以共享这些属性和方法。

拓展:
一般情况下,公共属性定义在构造函数里面,公共方法定义在原型对象上。

原型链

原型对象也可能拥有原型,并从中继承属性和方法,依次层层向上继承,这种关系被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。这种继承关系通过对象原型(_prototype_)来完成。 (自用面试题)原型、原型链是什么?.PNG