5202年了,还不懂原型链吗?

原型与原型链

画出逻辑关系图是最容易理解其中关系的方式。

解释:

  • 任何时候,只要创建了一个函数,就会为这个函数创建了一个prototype属性(指向原型对象)
  • 所有的原型对象会自动获取一个名为constructor的属性,指向与之关联的构造函数。
  • 每次用构造函数创建函数的实例,就会暴露出一个__proto__的属性,用来访问这个对象的原型。

原型层级

当访问对象属性时,会根据原型链查找,先从实例本身上查找,找不带就会去访问原型对象,直到找到为止,

当实例对象上存在一个和原型对象同名的属性, 这时实例对象上的这个属性,会遮蔽原型对象上的属性。

通过对实例使用hasOwnProperty()方法可以判断访问的是实例属性,还是原型属性。

来自实例就返回true,来自原型就返回false。

原型和in操作符

in操作符由两种使用方式 一个是单独使用。 一个是配合 for-in循环中使用。

单独使用,in操作符会在可以 通过对象访问指定属性的 返回true 。 不管是原型还是实例上

如果需要判断一个属性是否在原型上,同时使用 hasOwnProperty和in操作符判断。

js 复制代码
function hasPrototypeProperty(object, name){ 
 return !object.hasOwnProperty(name) && (name in object); 
} 

for-in循环。会通过访问对象,返回可被枚举的属性,包含实例属性和原型属性。

话术总结

面试官提问:"说一说js中原型与原型链。"

我:"当我们创建了一个函数时,就会为这个函数创建了一个prototype属性指向他的原型对象,所有的原型对象会自动获取一个名为constructor的属性,指向与之关联的构造函数。每次用构造函数创建函数的实例,就会暴露出一个__proto__的属性,用来访问这个对象的原型。由__proto__属性一直访问,最终会终止与Object.prototype。这就组成了原型链。当我们查找对象上的一个属性时,如果自身没有这个属性,就回沿着原型链继续往下查找,直到找到这个属性,并返回他的值。"

面试官提问:"666"

相关推荐
天蓝色的鱼鱼20 分钟前
都2026年了还不会Vite插件开发?手写一个版本管理插件,5分钟包会!
前端·vite
苏武难飞31 分钟前
分享一个33号远征队的效果!
前端
鹏程十八少1 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
亿元程序员1 小时前
这款值68亿的游戏,你不实战一下吗?安排!
前端
摸鱼的春哥2 小时前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端
明月_清风2 小时前
告别遮挡:用 scroll-padding 实现优雅的锚点跳转
前端·javascript
明月_清风2 小时前
原生 JS 侧边栏缩放:从 DOM 监听到底层优化
前端·javascript
万少11 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站13 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名15 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员