【JS】如何设置一个只读属性

1. Object.defineProperty

通过属性描述符将属性设置为不可修改

const obj = {};
Object.defineProperty(obj, 'name', {value: 'John',writable: false, // 不允许修改该属性configurable: true, // 允许删除或修改属性描述符
});console.log(obj.name); // 输出: Johnobj.name = 'Alice'; // 不能修改
console.log(obj.name); // 输出: John

2. Object.freeze

冻结对象

const obj = {name: 'John'
};Object.freeze(obj);obj.name = 'Alice'; // 不会生效
console.log(obj.name); // 输出: John

3. 只设置get访问器

不设置 set 或不进行任何操作

const obj = {};
Object.defineProperty(obj, 'name', {get() {return 'John';},set() {// 什么也不做,或者抛出异常console.log('Cannot modify name');}
});console.log(obj.name); // 输出: John
obj.name = 'Alice'; // 输出: Cannot modify name
console.log(obj.name); // 输出: John

Proxy

劫持某属性,不进行修改

const handler = {set(target, prop, value) {if (prop === 'name') {console.log('Cannot modify name');return false; // 阻止修改}target[prop] = value;return true;}
};const obj = new Proxy({ name: 'John' }, handler);console.log(obj.name); // 输出: John
obj.name = 'Alice'; // 输出: Cannot modify name
console.log(obj.name); // 输出: John

总结

Object.defineProperty: 适用于单个属性的只读设置。
Object.freeze: 会冻结整个对象,包括其所有的属性和方法
get 访问器使得属性变得只读,同时可以进行更复杂的控制,例如通过抛出错误或打印信息来响应修改操作。
Proxy 提供了灵活的控制,可以根据需要对属性设置条件,比如只对某些属性设置只读,而不影响其他属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv6-4.0部分代码阅读笔记-inferer.py

inferer.py yolov6\core\inferer.py 目录 inferer.py 1.所需的库和模块 2.class Inferer: 3.class CalcFPS: 1.所需的库和模块 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # 用于模型的推理。 import os import cv2 import time import math import torch import…

Linux:git的了解和基础使用(保姆级教程)

文章目录 引言一、git是什么1.1 版本控制器git1.2 git的历史 二、git的使用2.1 安装git2.2 创建gitee账号2.3 git三板斧2.3.1 add2.3.2 commit2.3.3 push 三. git的补充总结 引言 git是一款软件,它用于帮助我们来管理代码以及文件,掌握并使用git可以很有…

探索LINQ在C#中的应用:从基本查询到数据联接

LINQ(语言集成查询)是微软为.NET框架开发的一种强大功能,于2007年作为C# 3.0和Visual Basic .NET 9.0的一部分引入。LINQ的诞生旨在提供一种一致且直观的方式来查询和操作数据,无论数据来源是内存中的集合、数据库还是XML文档。 …

鸿蒙UI开发——实现环形文字

1、背 景 有朋友提问:您好关于鸿蒙UI想咨询一个问题 如果我想实现展示环形文字是需要通过在Text组件中设置transition来实现么,还是需要通过其他方式来实现。 针对这位粉丝朋友的提问,我们做一下解答。 2、实现环形文字效果 ❓ 什么是环形…

搭建轻量级文件服务器Dufs

前言 Dufs是什么? 答:是一款轻量级文件管理服务器,类似于FTP服务器但又比FTP更好用易于管理。 Dufs有什么特性? 答: ‌静态文件服务…

什么时候用 Tailwind 什么时候用 CSS

结合自己开发项目,进行整理 对比图 特性/场景Tailwind CSS普通 CSS常见布局✅ margin, padding, flex, grid⚠️ 可用但繁琐基础样式✅ 颜色、字体、间距等预设值⚠️ 需要手动定义响应式设计✅ sm:, md:, lg: 前缀⚠️ 需要写 media queries特定数值❌ 受限于预设…

【软考】系统分析师第二版 新增章节 第20章微服务系统分析与设计

微服务系统是一类基于微服务架构风格的分布式系统,它将应用程序拆分成多个独立的小型服务,每个服务都运行在独立的进程中,并采用轻量级通信协议进行通信。这些服务可以由不同的团队开发、不同的编程语言编写,并且可以按需部署。微…

JS类型检测大全:从零基础到高级应用

文章目录 1. typeof 操作符typeof null 为什么是 object 2. instanceof 操作符3. Object.prototype.toString.call()(最准确的)4. Array.isArray()5. constructor 属性总结 在JavaScript中,有多种方法可以用来检测数据类型。每种方法都有其特…

基于SSM的校园美食交流系统【附源码】

基于SSM的校园美食交流系统 效果如下: 管理员主页面 用户主页面 美食信息页面 美食资讯页面 修改密码页面 论坛中心页面 研究背景 随着高校信息化建设的不断推进,校园生活日益丰富多样,学生对于美食的需求与探索也愈发旺盛。然而&#xff…

css实现div被图片撑开

固定好盒子的宽度&#xff0c;高度随传过来的图片大小决定 <div class"tab-con"> <img:src"concertInfo.detail"alt""> </div>.tab-con {margin-bottom: 20px;width: 700px;img {width: 700px;height: auto;object-fit: cont…

PICO+Unity MR空间网格

官方链接&#xff1a;空间网格 | PICO 开发者平台 注意&#xff1a;该功能只能打包成APK在PICO 4 Ultra上真机运行&#xff0c;无法通过串流或PICO developer center在PC上运行。使用之前要开启视频透视。 在 Inspector 窗口中的 PXR_Manager (Script) 面板上&#xff0c;勾选…

斗破QT编程入门系列之前言:认识Qt:获取与安装(四星斗师)

本系列是在学习完C之后&#xff0c;然后通过Qt构建界面来&#xff0c;赋予枯燥的代码新的样貌&#xff0c;这样我们才能开发出更人性化的程序&#xff0c;同时会进一步提高初学者对编程的兴趣&#xff0c;大家加油&#xff0c;斗破Qt来了。 斗破Qt目录&#xff1a; 斗破Qt编程…

PyTorch核心概念:从梯度、计算图到连续性的全面解析(三)

文章目录 Contiguous vs Non-Contiguous TensorTensor and ViewStrides非连续数据结构&#xff1a;Transpose( )在 PyTorch 中检查Contiguous and Non-Contiguous将不连续张量&#xff08;或视图&#xff09;转换为连续张量view() 和 reshape() 之间的区别总结 参考文献 Contig…

家庭宽带如何开启公网ipv4和ipv6

好久没更新了&#xff0c;最近在家里折腾nas。一来自己有下电影的习惯&#xff0c;二来手机的icloud容量也不够了。所以买了群晖的423,但是nas要想用的畅快&#xff0c;外网访问必不可少。所以我之前研究了下&#xff0c;打家里的电信快带打通了外网。 一般nas的服务商基本都会…

ORACLE创建用户之后查询不到创建的用户

CREATE USER hr1 IDENTIFIED BY hr123DEFAULT TABLESPACE test_spacTEMPORARY TABLESPACE temp_spacQUOTA UNLIMITED ON test_spac;如果是按照这样创建的&#xff0c;Oracle 会将 hr1 转换为大写&#xff0c;因此在数据库中存储的用户名为 HR1 查询的时候要这样编写sql语句 S…

【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本

文章目录 一、Ansible安装及远程控制1、关闭防火墙和SELinux2、安装ansible3、配置SSH无密码登录1、在管理机上生成一对密钥2、将公钥下发到远程主机3、保管密钥 4、主机目录 二、常用模块1、setup模块2、copy模块3、file模块4、shell模块5、script模块6、ping模块7、group模块…

基于 RNN 的语言模型

基于 RNN 的语言模型 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类网络连接中包含环路的 神经网络的总称。 给定一个序列&#xff0c;RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度&#xff0c;历史状态被循环累积&#xff0c;并作为…

Flink处理无界数据流

Apache Flink 是一个专为处理无界和有界数据流而设计的流处理框架。处理无界数据流的关键在于能够实时处理不断到达的数据&#xff0c;并且保证处理的正确性和高效性。以下是Flink处理无界数据流的主要步骤和技术&#xff1a; 1. 数据源 (Source) 无界数据流的第一个步骤是从…

oracle服务器意外宕机数据库启动失败故障处理记录

客户反馈由于服务器意外宕机&#xff0c;导致数据库业务不能正常运行&#xff0c;经过一番努力后通过redo日志恢复成功&#xff01; 故障描述&#xff1a;ORA-00600: 内部错误代码, 参数: [krctcr_4], [1179922061], [1179942042], [], [], [], [], [], [], [], [], [] 现将主要…

第二十九篇——线性代数:“矩阵”到底怎么用?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学中的线性代数&#xff0c;再生活中的落地和应用&#xff0c;是我这个…