当前位置: 首页 > news >正文

JS【详解】对象的内部属性 vs 内部方法

每个JS 对象都有很多内部属性和方法,仅供 JS 引擎管理和操作对象使用,对开发者不可见,只能用特殊的方法访问和修改(不建议修改)

了解它们可以帮助我们更好的理解对象的行为,无需深究其具体实现

下文中,[[]] 只是表示其为内部属性/方法,不能在代码中使用

内部属性

[[Prototype]] 对象的原型

// 访问 [[Prototype]] 的方法
Object.getPrototypeOf(目标对象) // 得到该对象的原型,如 Object.prototype

[[Class]] 对象的类型

// 访问 [[Class]] 的方法
Object.prototype.toString.call(目标对象) // 得到该对象的类型,如'[object Object]'

【应用】获取任意变量的数据类型

/*** 获取任意变量的类型** @param x 变量* @returns 返回变量的类型名称(小写字母)*/
function getType(x) {// 获取目标数据的私有属性 [[Class]] 的值const originType = Object.prototype.toString.call(x); // 以字符串为例:'[object String]'// 获取类型属性值中' '的下标const spaceIndex = originType.indexOf(" ");// 截取类型属性值中' '到末尾']'之间的字符串const type = originType.slice(spaceIndex + 1, -1); // 以字符串为例:'String'// 将字符串转换为小写return type.toLowerCase(); //以字符串为例:'string'
}

[[Extensible]] 对象是否可扩展

即,是否可以添加新属性,默认为 true

// 访问 [[Extensible]] 的方法
Object.isExtensible(目标对象) // true

阻止对象添加新属性

Object.preventExtensions(目标对象) // [[Extensible]] 变为false

内部方法

内部方法是JavaScript引擎的内部实现细节,因此它们的具体实现和名称可能会因不同的JavaScript引擎而异。

[[Get]]

获取对象属性的值

通过 obj.prop 或 obj[“prop”] 获取对象属性值时,JS 引擎内调用此方法

[[Put]]

设置对象属性的值

通过 obj.prop = value 或 obj[“prop”] = value 修改对象属性值时,JS 引擎内调用此方法

[[HasProperty]]

检查对象是否包含某个属性

使用 in 操作符或 Object.hasOwnProperty() 等方法来检查对象是否包含某个属性时,JS 引擎内调用此方法

[[Delete]]

删除属性

delete 操作符删除对象属性时,JS 引擎内调用此方法

[[DefineOwnProperty]]

在对象上定义或修改属性

使用 Object.defineProperty() 方法来定义或修改对象的属性时,JS 引擎内调用此方法

[[Enumerate]]

枚举对象的属性

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Android Studio】修改项目名称can‘t rename root module解决办法
  • 【Python随笔】比PyQt5更先进的pyside6安装和使用方法
  • 【使用Python和ADB过滤与处理Android包名】
  • SAAMDSSA-系统架构师(五十一)
  • Go开发后端和Vue3开发前端的前后端分离框架中自己手戳一个OA流程审批、工作流引擎给新时代一个漂亮便捷的工作流引擎
  • 验证码案例
  • UE中的运行时Mesh - 学习笔记
  • day16
  • Nginx系列-Nginx Location匹配规则
  • 【鸿蒙学习】Stage模型与FA模型的对比与应用选择
  • Spring Boot 3.x Rest API最佳实践之统一响应结构
  • 作为硬件工程师和射频工程师必备的射频前端冷知识
  • 提升前端性能的JavaScript技巧
  • 异步调用实践:Async,Future, TaskExecutor、EventListener
  • 网络编程----TCP/IP协议
  • @jsonView过滤属性
  • 【Amaple教程】5. 插件
  • Angular Elements 及其运作原理
  • eclipse(luna)创建web工程
  • export和import的用法总结
  • log4j2输出到kafka
  • Shell编程
  • springMvc学习笔记(2)
  • Windows Containers 大冒险: 容器网络
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 构造函数(constructor)与原型链(prototype)关系
  • 解析带emoji和链接的聊天系统消息
  • 使用putty远程连接linux
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小程序开发之路(一)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • k8s使用glusterfs实现动态持久化存储
  • 仓管云——企业云erp功能有哪些?
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • # Kafka_深入探秘者(2):kafka 生产者
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • $.proxy和$.extend
  • ${ }的特别功能
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (十二)Flink Table API
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)Scala的“=”符号简介
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core Web APi类库如何内嵌运行?
  • .Net mvc总结
  • @Repository 注解
  • [20160902]rm -rf的惨案.txt
  • [AR Foundation] 人脸检测的流程
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [ASP]青辰网络考试管理系统NES X3.5