原型与原型链,老生常谈的话题

关于这个知识点的网上的博客帖子已经很多很多了,无意与大牛们比,只是想着自己理解了表达提炼出来,作为整理,方便记录。

在这里插入图片描述


全面的理解一遍

1️⃣ JavaScript是面向对象的语言。面向对象的语言都是通过类来创建实例对象,但是ES6之之前没有class。


2️⃣ JavaScript通过构造函数生成实例化对象。

function Car(){
	//code
}
var suv = new Car();

3️⃣ 每个函数都有一个prototype属性,本质是对象。

//可以访问prototype
console.log(Car.prototype);

4️⃣ 每个实例对象都有一个私有属性[[Prototype]],指向这个实例对象的原型.

可以用ES6的Object.getPrototypeOf()来访问该属性。

Object.getPrototypeOf(实例) 等于 实例.__proto__


5️⃣ 构造函数的prototype指向该构造函数创建的实例对象的原型(__proto__)。

在这里插入图片描述

6️⃣ 每个原型对象的constructor属性都指向构造函数。

在这里插入图片描述
7️⃣ 原型链就是原型上一层一层的结构关系(原型往上查找的过程)。

如果想访问某个属性:

①在实例对象suv内部找

②在对象原型(suv.__proto__ / Car.prototype)找

③在对象原型的原型(Car.prototype.__proto__)找

④…

在这里插入图片描述
这就是原型链。


8️⃣ 原型链的顶端是Object.prototype

(所有JavaScript对象都是基于Object)

在这里插入图片描述
9️⃣ JavaScript的继承是基于原型链。在原型链上任何位置设置属性,都能被访问到。


🔟 我们其实已经在不经意间使用了原型链,我们新建的数组都是继承的Array.prototype,才有各种方法可以直接使用;函数也是来自于Function.prototype




总结版的回答

  • JS对象在创建时就会关联一个对象,这个对象就是原型。

  • 每一个对象都会从原型上继承属性。

  • 原型也是对象,原型也有原型对象,层层往上,直到Object.prototype,这就是原型链。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值