JavaScript 原型和原型链

原型

在 JavaScript 中,我们所称的原型有两个使用语境:

原型关系

原型属性

原型关系指对象的原型对象,且该对象会继承原型对象的所有属性。

原型属性指函数(函数本质上也是对象)的原型属性(.prototype)。

原型关系

每一个对象都有自己的原型对象(Object除外),对象会继承原型对象的所有属性。

在浏览器的控制台中,可以使用 .__proto__来查看一个对象的原型对象。

letobj = {}

console.dir(obj.__proto__)

只要是对象(Object除外),就一定拥有一个.__proto__属性,指向该对象的原型对象。

一般情况下,对象都是由构造函数构造出来的,该对象的.__proto__指向该构造函数的.prototype属性。

let obj = new Number(1)

obj.__proto__ === Number.prototype

对象.__proto__ === 函数.prototype

一般的对象还有一个.constructor属性指向该对象的构造函数。

原型属性

每一个函数都会有一个原型属性(.prototype),该原型属性指向该函数构造的对象的原型对象(.__proto__)。

同样可以用控制台打出来

letnum =newNumber(1)

num.__proto__ ===Number.prototype// true

console.dir(Number.prototype)

原型链

原型链描述对象之间互相引用的关系。

获取一个对象的属性时,JavaScript引擎先从对象自身查找,如果没找到,就到这个对象的原型对象上查找,还没有找到就再继续到原型对象上查找,直到查找到这个属性或者原型链的终点。

所有原型链的最后一个原型对象都是Object.prototype,Object.prototype的原型是null

letarray =newArray(1,2)

console.log(array)

array.__proto__ ===Array.prototype// true

Array.prototype.__proto__ ===Object.prototype// true

Object.prototype.__proto__ ===null// true

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容