原型链的解析

本文详细解析了JavaScript中prototype和__proto__的区别,探讨了new操作符的工作原理,以及如何通过原型链实现对象间的属性继承。理解这些核心概念对于深入掌握JavaScript编程至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.prototype

prototype属性是一个显式原型属性,只有函数才有这个属性,当我们创建一个函数时,prototype就产生了,这个prototype是一个对象,并且只有一个属性constructor,指向构造函数本身。

2.proto

每个对象都有一个隐式原型属性,指向创建该对象的函数的原型。这个属性实际指向了 [[prototype]],但是 [[prototype]] 是内部属性,我们并不能访问到,所以使用 proto 来访问。因为在 JS 中是没有类的概念的,为了实现类似继承的方式,通过 proto 将对象和原型联系起来组成原型链,得以让对象可以访问到不属于自己的属性,你不知道的Javascript解释这实际是一个委托。

3. new的过程

  • 创建一个空的对象
  • 链接到原型
  • 绑定this
    -返回放回这个对象
function create() {
	//新建一个对象
	let obj = {}
	// 获得构造函数
	let con = [...arguments][0]
	// 将新对象的隐式原型链接到构造函数的显示原型
	obj.__proto__ = con.prototype
	// 执行构造函数将this绑定到新的对象上
	let result = con.apply(obj,arguments)
	// 判断result是否是对象,并返回对象
	return typeof result === 'object' ? result: obj

4. 原型链

原型链的示意图
在这里插入图片描述
每个对象和原型的__proto__ 都指向他的父原型,他的父原型的__proto__又指向他的父原型。这样沿着隐式原型查找属性就是原型链。

4.总结

原型链的形成真正是靠__proto__ 而非prototype,当JS引擎执行对象的方法时,先查找对象本身是否存在该方法,如果不存在,会在原型链上查找,但不会查找自身的prototype。
一个对象的__proto__记录着自己的原型链,决定了自身的数据类型,改变__proto__就等于改变对象的数据类型。
函数的prototype不属于自身的原型链,它是子类创建的核心,决定了子类的数据类型,是连接子类原型链的桥梁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值