首页 > 其他分享 >js/ts prototype最简单且深刻的理角

js/ts prototype最简单且深刻的理角

时间:2024-06-23 11:43:00浏览次数:3  
标签:Function 理角 proto 对象 Object ts js 类型 prototype

最关健的二点:
1. js任何对象(函数也是对象)都有__proto__私有属性,有的可能会显示[[Prototype]] (chorme浏览器),代码直接访问属性会报错,但可以正常运行的。__proto__只是另一个对象的引用(一般是类型对象,也可以修改)。
2. 只有函数对象Function才有 .prototype属性,它本身就是一个对象,给其它对象提供共享属性和方法的对象。是可以正常访问,每个prototype对象都有constructor属性,它是构造函数的引用。

补充: 所有内置类型是一个Function对象,因此可以修改Number.prototype( TypeScript 不允许直接扩展原生类型,可以使用类型守卫或类型断言来规避 TypeScript 的类型检查,但这种做法需要谨慎考虑)

通过下面例子来解释上面二名话:
class A{};
定义了A类,其实定义了二个类型: A类型和 typeof(A)类型(A.prototype.constructor的类型)。就和内置类型number与Number,string与String是一样的。
const a:typeof A = A; // typeof A 可以是A或者A的子类
const b:A = new A(); // b是调用了constructor才生成的对象
为什么会这样?js原本是没有class定义的,是通过函数和prototype对象来实现其它语言类的功能(其它语言定义一个类后,只有一个类型),所以
A.proto = Function.prototype;
b.proto = A.prototype;
prototype属性,它本身就是一个对象,所以
Function.prototype.proto = Object.prototype
A.prototype.proto = Object.prototype
Object.prototype.proto = null

再看一个例子
const aa:number =1;
aa.proto = Number.prototype; Number.prototype =Object.prototype;
Number.proto = Function.protoype; Function.protoype = Object.prototype;
内置类型也是和自定义类型一样的

好像真的就是二句话就说清楚了prototype,如果有理解错误的地方欢迎讨论指正。

标签:Function,理角,proto,对象,Object,ts,js,类型,prototype
From: https://www.cnblogs.com/abc126655/p/18263177

相关文章

  • 基于JSP的“塞纳河畔左岸”的咖啡馆管理系统
    开头语:塞纳河畔左岸的咖啡,我手一杯品尝的你美~哎哟,不错哦!我们今天来介绍一下咖啡馆管理系统!你好呀,我是计算机学长猫哥!如果你对咖啡馆管理系统感兴趣或有相关需求,欢迎联系我,我的联系方式在文末。开发语言:Java数据库:MySQL技术:JSP技术+Java语言工具:Eclipse、MySQL......
  • 基于JSP的教学质量评价系统
    开头语:你好,我是计算机学长猫哥。如果您对教学质量评价系统感兴趣或有相关需求,欢迎随时联系我。开发语言:Java数据库:MySQL技术:JSP技术+Java语言工具:MyEclipse、Tomcat服务器系统展示首页管理员功能模块学生功能模块教师功能模块摘要随着科技的不断......
  • SpringBoot前后端传递数据时常用的JSON格式数据是什么?【讲解JSON概念、语法、以及Java
    SpringBoot前后端传递数据时常用的JSON格式数据是什么?JSON概念JSON语法JSON的两种结构:JSON字符串和Java对象互转:objectMapper.writeValueAsString(person);objectMapper.readValue(jsonStr,Person.class);在SpringMVC框架中,前后端交互会自动转JsonJSON概念JSON:Jav......
  • Ubuntu 24.04 LTS 开启 ssh 免密登录
    参考https://zhuanlan.zhihu.com/p/146976128https://www.myfreax.com/how-to-set-up-ssh-keys-on-ubuntu-20-04/https://www.cnblogs.com/deepinnet/p/13663534.htmlhttps://blog.csdn.net/counsellor/article/details/81182567环境环境版本说明UbuntuUbuntu......
  • JSONObject 【解析JSON格式】使用Gson库解析包含数组的JSON
    本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)JSONObject【......
  • 探索ChatTTS项目:高效的文字转语音解决方案
    文章目录......
  • 将socks5列表转换成sing-box格式的json
    将socks5列表转换成sing-box格式的jsonfunctiongetRowMap($tag,$server,$port,$user,$pass){$mRow=[];$mRow['tag']=(string)$tag;$mRow['type']='socks';$mRow['version']='5';$mRow[......
  • nvm管理node.js版本
    起因:自己在使用nodejs的时候经常遇到版本问题。每次手动重装更换版本觉得非常麻烦。之前在搭建静态博客的时候,遇到版本问题,生成出来博客静态页白屏。这个就是我部署在github上的静态博客:https://blog.xisoul.cn一、首先卸载Node.js1.打开控制面板锚点2.卸载程序3.找到Node......
  • FastJson使用详解
    FastJson文章目录第一章FastJson使用详解这一篇就够了第二章FastJsonHttpMessageConverter类的作用与使用详解第三章Jackson使用详解文章目录FastJson文章目录前言一、FastJson是什么?二、使用步骤1.引入库2.序列化和反序列化Java对象3解析JSON字符串4使用注解......
  • 常用JS特性浏览器支持版本查询
    此文仅供自己快速查询常用的特性。红色表示不支持。FeatureiOSAndroidChromeFirefoxES6Class10.34.4.44946箭头函数104.4.44522let10(for循环scope错误),114.4.441(strict模式),4944const10(scope错误),114.4.4(非严格模式)41(非严格没块域)......