《吊打面试官》-- 说一说原型与原型链

前言

      大家好,我叫张开心。我希望能够用通俗易懂的话语帮助前端新手快速入门。如果我在文章中有任何错误,请务必指出来,我们一起共同进步。


正文

原型与原型链

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

解释这张图:

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

所以实例和构造函数没有直接的关系,而与构造函数的原型之间有个关系。

由__proto__属性一直访问,最终会终止与Object.prototype。这就组成了原型链

原型层级:

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

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

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

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

原型和in操作符:

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

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

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

function hasPrototypeProperty(object, name){ 
 return !object.hasOwnProperty(name) && (name in object); 
} 

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


 

二、额外扩展

如何获取对象的Key值?


话术总结

       个人认为是重中之重!!!

       在学习阶段,我们需要梳理知识点,以促进对内容的更好理解。但是在面试时,我们需要将这些知识点有条理地表达出来,避免给面试官一种零散的印象。这就需要通过练习来掌握合适的表达方式,不然就会有茶壶里倒饺子的感觉。

      在面试过程中,我建议尽量分点或者分步描述,这样既能保持思路的清晰,又能让面试官听得舒服。逐步划分话题并有条不紊地讲解,会使整个回答更易于理解和吸收。

       因此,为了在面试中表达得更加流畅,我们应该在训练中改善自己的话术,确保表达逻辑清晰、层次分明,这样既能更好地展示自己的知识水平,也能给面试官留下良好的印象。

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

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

面试官提问:“666”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值