共计 876 个字符,预计需要花费 3 分钟才能阅读完成。
明天在我的项目中看到了用 Object.prototype.toString.call()
这个办法封装的检测数据类型的工具。
然而浏览器搜寻相干原理的好答复百里挑一,故而想记录一下,万一能够帮忙到更多的老手呢?我的文章都是十分通俗易懂的,因为我写文章的时候,都是依据一个前提,如果我是刚开始学习 js 的老手,他人如果这样解说这个知识点,那么我也能听懂。我不喜爱那种用专业术语去解释一个知识点凸显本人程度高超的文章,所以我通常采纳费曼学习法的形式去记录这些知识点。喜爱的话能够看看我其它文章,对新人极度敌对的哟~😊
1. 我置信大多数人对这个办法有一个误区,包含我,在刚开始学 JS 的时候,容易对这个办法产生了一个谬误的认知。
比方 const a = {name:"韩振方"}
,如同感觉a.toString
办法应该返回字符串类型的{name:"韩振方"}
。问题的关键点就恰好在这个中央。
2. 首先咱们要晓得 toString
这个办法,这个函数的返回值原本就应该是上面的固定格局。一个字符串个格局的[object xxxx]
xxxx 代表着调用这个办法的“数据”的数据类型。
3.重点来了 :js 其实是重写了某些数据类型的toString
办法,所以才会造成上面的状况,在这里咱们拿 函数 类型举例子,其余数据类型同理:
嗯 … 对,这才是我现实中的toString
,会返回这个变量的字符串显示样子。
4. 要想搞明确这个知识点,在这里你必须要对原型链和原型有清晰的意识。咱们晓得,JS 的大原型其实是 Object
构造函数的 prototype
指向的那个Object
,JS 的世界的起源就是它。
这个对象上的 toString
办法才是原汁原味的toString
。
5. 当咱们用 delete
办法去删除 Function.prototype
(也就是Function
构造函数的原型)身上的 toString
, 而后咱们再次调用name.toString
会产生什么呢?
6. 然而咱们往往不会用 delete
去删除,所以就采纳 call
办法去扭转 Object.prototype.toString
办法 this
的指向。
是否豁然开朗了呢?