对 JavaScript 原型,原型链的理解

本文深入探讨JavaScript中的原型和原型链概念,包括显式原型prototype、隐式原型_proto、constructor属性以及原型链的工作原理。通过实例解析了如何通过原型链实现对象间的属性和方法共享,并阐述了原型链在解决继承问题上的关键作用。同时,文章列举了常见的原型与原型链面试题,帮助读者巩固理解。

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

一、原型,原型链的理解

  1. prototype 显式原型
    每个函数都有一个 prototype 属性,被称为显式原型,
    里面包含了这个构造函数公共的方法
  2. _ proto 隐式原型
    每个实例对象都会有_ proto 属性,其被称为隐式原型
    每一个实例对象的隐式原型
    proto _属性指向自身构造函数的显式原型 prototype
  3. constructor
    每个 prototype 原型都有一个 constructor 属性,指向它关联的构造函数。
  4. 原型链
    获取对象属性或者方法的时候,如果对象本身没有这个属性,那就会去他的原型_ proto 上去找,如果还查不到,就去找原型的原型,一直找到最顶层(Object.prototype)为止。
    Object.prototype 对象也有
    proto _属性值为 null。


二、原型与原型链的常见面试题

  1. 原型对象的好处:所有对象实例共享它所包含的属性和方法

  2. 什么是原型链?原型链解决的是什么问题?
    1)原型链解决的主要是继承问题
    2)每个对象拥有一个原型对象,通过 proto 指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null(Object.proptotype.__proto__指向的是null)。这种关系被称为原型链(prototype chain),通过原型链一个对象可以拥有定义在其他对象中的属性和方法
    在这里插入图片描述

3)构造函数 Parent、Parent.prototype 和 实例 p 的关系如下:(p.proto === Parent.prototype)
在这里插入图片描述
3. prototype 和 proto 区别是什么?
1)prototype是构造函数的属性
2)__proto__是每个实例都有的属性,可以访问 [[prototype]] 属性
3)实例的__proto__与其构造函数的prototype指向的是同一个对象

	注:内存结构图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值