美文网首页
什么是 JS 原型链?简单易懂

什么是 JS 原型链?简单易懂

作者: 郑先森 | 来源:发表于2020-11-18 16:42 被阅读0次

我们知道 JS 有对象,比如

 var obj = { name: 'obj' } 
image.png
我们会发现 obj已经有几个属性(方法)了。那么问题来了:valueOf/toString/constructor 是怎么来?我们并没有给 obj.valueOf 赋值呀。

上面这个图有点难懂,手画一个示意图:


image.png

我们发现控制台打出来的结果是:

obj本身有一个属性 name (这是我们给它加的)
obj还有一个属性叫做 proto(它是一个对象)
obj还有一个属性,包括 valueOf, toString, constructor等
obj.__proto__其实也有一个叫做__proto__的属性(console.log没有显示),值为 null

现在回到我们的问题:obj 为什么会拥有 valueOf / toString / constructor 这几个属性?
答案: 这跟 __proto__有关 。
当我们「读取」 obj.toString 时,JS 引擎会做下面的事情:


看看 obj 对象本身有没有 toString 属性。没有就走到下一步。


看看 obj.__proto__ 对象有没有 toString 属性, 发现 obj.__proto__ 有 toString 属性, 于是找到了,所以 obj.toString
实际就是第2步中找到的 obj.__proto__.toString。


如果 obj.__proto__没有,那么浏览器会继续查看 obj.__proto__.__proto__。


如果 obj.__proto__.__proto__ 也没有,那么浏览器会继续查看 obj.__proto__.__proto__.__proto__。


5.直到找到 toString 或者 __proto__ 为 null。
上面的过程,就是「读」属性的「搜索过程」。而这个「搜索过程」,是连着由 proto 组成的链子一直走的。这个链子,就叫做「原型链」。

相关文章

  • 什么是 JS 原型链?简单易懂

    我们知道 JS 有对象,比如 上面这个图有点难懂,手画一个示意图: 我们发现控制台打出来的结果是:

  • JS原型链

    1什么是JS原型链? 通过__proto__属性将对象与原型对象进行连接. 1.1 JS原型链的作用? 组成的一个...

  • JS补充7

    一.什么是js对象 1.简单理解js对象 在了解原型链之前,我们先要弄清楚什么是JavaScript的对象,Jav...

  • JavaScript由浅及深敲开原型链(一)

    一.什么是js对象 1.简单理解js对象 在了解原型链之前,我们先要弄清楚什么是JavaScript的对象,Jav...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • js原型链--js面向对象编程

    简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢...

  • 原型与新版的类-class

    首先来理解原型原型 === 共用属性可以先看看方姐的几篇文章:什么是JS原型链JS 中 proto 和 proto...

  • web前端面试之js继承与原型链(码动未来)

    web前端面试之js继承与原型链(码动未来) 3.2.1、JavaScript原型,原型链 ? 有什么特点? 每个...

  • 2022前端高频面试题

    JS相关 1.原型和原型链是什么 原型和原型链都是来源于对象而服务于对象的概念js中引用类型都是对象,对象就是属性...

网友评论

      本文标题:什么是 JS 原型链?简单易懂

      本文链接:https://www.haomeiwen.com/subject/hvbciktx.html