原型链
前两天电面的时候,被问到原型链,其实也是了解的,但当时脑子短路,就只回答了原型链继承,并没有给出核心的讲解。我想那肯定不是面试官想要的。我当时真的是脑子短路了,至少应该说一句:原型链的核心是_proto_
今天我要小小地归纳一下
我今天看了一篇人家的文章,准备按着那个思路来
1、普通对象与函数对象
很早就听大神讲过,JS中一切皆对象!
但是还要细分为普通对象和函数对象。其实也好理解:函数声明,函数表达式即为函数对象;那么其它的就是普通对象了。(我的理解简单粗暴,我们看到的函数就是函数对象咯)
为了表述更直观,我偷了一张图:
2、原型对象prototype
原型对象prototype是函数对象特有的属性
原型对象prototype的实质是普通对象,但Function.pototype是一个例外,体现在两点:
1、它是一个函数对象
2、它没有prototype属性
function f(){}; console.log(f.prototype) //Object console.log(typeof f. prototype) //Object console.log(typeof Function.prototype) // Function,这个特殊 console.log(typeof Object.prototype) // Object console.log(typeof Function.prototype.prototype) //undefined
这是第二行代码的Object展开结果
想起很久之前听过一个大神讲课,他大致描述prototype如下:
1 function f(){}; 2 f.prototype={ 3 constructor:function f(),//构造器指向函数本身 4 _proto_:parent.prototype//指向上一层原型对象 5 }
为什么Function.pototype是函数对象呢?
可以看到,函数对象f的原型对象prototype是Object
而Function.pototype却是一个匿名空函数
3、原型链
无论是函数对象还是普通对象,都存在__proto__内置属性
它是原型链的而核心
用于指向创建本对象的函数对象的prototype
同时,F.prototype的__proto__也指向创建F.prototype的函数对象(Object)的prototype
再往上
这个由__proto__串联起来知道null的链叫做原型链
两个注意点:
由于Object和Function都是JS内置函数对象,它们都是通过new Function创建,因此:
Object.__proto__===Function.prototype;
Function.__proto__===Function.prototype;
还有一个点,我不理解
上面已经验证过,Function.prototype是函数对象,一般而言,函数对象都是由new Function创建,那么Function.prototype.__proto__应该等于Function.prototype啊
但是:
Function.prototype真是特殊啊!!
不懂!!mark一下
4、总结
进一步说明原型链的核心是__proto__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现