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"

相关推荐
迅猛龙办公室4 小时前
Python输出当前计算机的系统日期和时间
开发语言·前端·python
小狼154545 小时前
浏览器扩展脚本为什么有时候不生效:注入时机、iframe 和单页路由,多多开票助手
前端·chrome
じòぴé南冸じょうげん5 小时前
油猴脚本突然发现变成灰色了,无法使用?页面不生效?刷新页面没反应?
前端
Csvn6 小时前
组合式 API(Composition API)
前端
火柴就是我8 小时前
Android 打包报错 25.0.3
android·前端
BD_Marathon8 小时前
消息对象中字段的说明
java·前端·python
八荒启·交互动画8 小时前
Web特效025—用 Canvas 2D 做Web特效的定义与边界:这支画笔能做到哪一步
前端·webgl·网页特效·八荒启-交互动画·八荒启
Ai-_Man8 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
excel8 小时前
Nuxt 中使用 useHead 优化 SEO 与 GEO
前端
IT_陈寒9 小时前
SpringBoot启动慢得像蜗牛?原来是这个配置在捣鬼
前端·人工智能·后端