前端面试每日一题——什么是原型链?

更新时间:2023-05-29 16:57:38 阅读: 评论:0

前端⾯试每⽇⼀题——什么是原型链?
什么是原型?
在JS中,每个函数在被创建的时候就会有⼀个 prototype属性,这个属性是⼀个指针,指向⼀个对象,⽽这个对象就是这个函数的原型对象(也就是原型),它是⽤来共享所有实例的属性和⽅法的地⽅,所以原型其实就是函数的伴⽣体(与⽣俱来的)
海扇蛤
var a = [1, 2, 3, 4, 5];
a.__proto__ === Array.prototype; // true
什么是原型链?
原型链,简单理解就是原型组成的链。当访问⼀个对象的某个属性时,会先在这个对象本⾝属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样⼀层⼀层向上查找就会形成⼀个链式结构,我们称为原型链。
葱笼创建⼀个构造函数:
function Person(name){
鸡蛋薄饼的做法this.name = name
}
var cheng =new Person('Cheng');
var lin =new Person('Lin');晶莹的近义词
打印cheng和lin,可以看到两个对象中都分别存在⼀个__proto__属性
万代千秋
小英语怎么写然后发现
console.log(cheng.__proto__ === lin.__proto__);// true
那么实例对象的这个__proto__属性到底是什么玩意?
console.log(cheng.__proto__ === Person.prototype);// true
console.log(lin.__proto__ === Person.prototype);// true
⼩结:实例对象有⼀个不可枚举的属性 proto,这个属性是⼀个指针,指向了其构造函数的prototype也就是原型对象,实例可以通过proto 访问到构造函数的原型上的⽅法
广东歌手
简单来说,实例对象的 __proto__ 指向构造函数的 prototype
那么,这个构造函数的原型是什么呢?
打印Person.prototype,可以看到也存在⼀个__proto__属性
console.log(Person.prototype.__proto__ === Object.prototype)
⼩结:函数的原型本质就是⼀个普通对象,所以他是来⾃Object的实例,因此,原型对象的 proto 属性指向Object.prototype。
再往下找Object.prototype的__proto__是指向哪⾥呢?
纯洁的爱最后发现是指向null
⼩结:Javascript中任意数据都能沿着⾃⼰的原型链最终找到Object.prototype
总结:
实例对象的 __proto__ 指向构造函数的 prototype,构造函数的__proto__ 指向Object的 prototype,Object的__proto__ 最终指向null

本文发布于:2023-05-29 16:57:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/807848.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:原型   对象   属性   实例   函数   创建   指向
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图