前端开发js里的__proto__和prototype的理解和区别
1. 概念说明
-
在js里,万物皆对象。
方法(Function)
是对象,原型(Function.prototype)
是对象。实例(new Function)
也是对象,因此,它们都会具有对象共有的特点。
所以这里涉及到对象有函数对象,原型对象、实例对象
,说明的时候可以省略了对象两个字方便在说法上有区别,不然容易搞混把自己搞晕了。 -
实例对象
是由函数对象
实例化出来的。 -
原型对象
是由函数对象
包含所有实例共享的属性和方法
形成的。 -
__proto__属性确切的名称是[[prototype]],因为[[prototype]]只是一个标准,而针对这个标准,不同的浏览器有不同的实现方式,在主流的浏览器中,都用__proto__来代表[[prototype]]属性
-
__proto__属性存在于函数、原型、实例当中都有的,它是形成原型链的关键属性
-
prototype属性是只有
函数
才特有的属性,当你创建一个函数时,js会自动为这个函数加上prototype属性,值是一个空对象。所以,函数在js中是非常特殊的,是所谓的一等公民
2. __proto__和prototype关系
参考文章:https://www.cnblogs.com/caihongmin/p/17993066
person1.__proto__==person2.__proto__==Person.prototype
,都是指向了原型,(项目开发一般通过prototype
给原型添加通用方法,然后实例就可以直接使用),关系如下:
原型链是通过 __proto__
属性关联起来的,(我们平时项目开发很少直接使用__proto__
这个属性):
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2019-12-27 android开发FontMetrics的理解