首页 > 其他分享 >【JS】如何设置一个只读属性

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

时间:2024-11-10 13:43:44浏览次数:3  
标签:obj name 只读 JS log console John 属性

1. Object.defineProperty

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

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

console.log(obj.name); // 输出: John

obj.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 提供了灵活的控制,可以根据需要对属性设置条件,比如只对某些属性设置只读,而不影响其他属性。

标签:obj,name,只读,JS,log,console,John,属性
From: https://blog.csdn.net/owo_ovo/article/details/143646549

相关文章

  • node.js毕设网上书店系统设计与实现(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于网上书店系统设计与实现的研究,现有研究主要集中在电子商务平台的设计、用户体验优化、服务效果评估等方面。然而,专门针对网上书店系统设计与实现的研究......
  • jsonargparse python cli 开发库
    jsonargparse是一个pythoncli库,尽管不如其他库火(click)目前Lightningcli就使用了此库包含的特性自动创建cli类似Fire,typer,Clize以及Tyro支持类型校验支持通过配置文件或者环境变量的配置解析(集成confuse,configargparse,dynaconf,omegaconf)dataclass支持说明jsonargpa......
  • 华为OD机试2024年E卷-MVP争夺战[100分]( Java | Python3 | C++ | C语言 | JsNode | Go
    题目描述在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP,MVP的条件是单场最高分得分获得者。可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场,并且让所有得分的选手得分都相同,然而比赛过程中的每1分钟的得分都只能由某一个人包揽。输入描述输入第一行......
  • 华为OD机试2024年E卷-AI识别面板[100分]( Java | Python3 | C++ | C语言 | JsNode | Go
    题目描述AI识别到面板上有N(1≤N≤100)个指示灯,灯大小一样,任意两个之间无重叠。由于AI识别误差,每次别到的指示灯位置可能有差异,以4个坐标值描述AI识别的指示灯的大小和位置(左上角x1,y1,右下角x2,y2),请输出先行后列排序的指示灯的编号,排序规则:每次在尚未排序的灯中挑选最高的......
  • JSP程序设计2577互联网在线医疗诊断系统【源码+讲解视频】
    项目包含:源码、参考论文、讲解视频、说明文档运行环境:推荐jdk1.8开发工具:Eclipse、MyEclipe以及idea(推荐)操作系统:windows108G内存以上(其他windows)浏览器:GoogleChrome(推荐)、Edge、360浏览器;数据库:MySQL5.7;数据库可视化工具:NavicatPremium推荐)以及其他Navicat版......
  • node.js毕设网络课程管理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着信息技术的飞速发展,网络教育逐渐成为教育领域的重要组成部分。关于网络课程管理系统的研究,现有研究主要以通用性的在线教育平台功能为主,专门针对毕......
  • node.js毕设试卷生成器(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景在现代教育体系中,考试作为一种重要的评估手段,广泛应用于各类教育机构。关于试卷生成器的研究,现有研究主要集中在通用性试卷生成系统的开发和应用上,专门......
  • 如何在 Ubuntu 18.04 上为生产环境设置 Node.js 应用程序
    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。简介Node.js是一个用于构建服务器端和网络应用程序的开源JavaScript运行环境。该平台可在Linux、macOS、FreeBSD和Windows上运行。虽然你可以在命令行上运行Node.j......
  • Unity类银河战士恶魔城学习总结(P117 Ice And Fire Item Effec 制作一把冰火属性的剑)
    【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/制作一把双重属性的剑,我取名为冰与火之歌 IceAndFire_Effect.cs这个脚本的作用是在玩家第三次攻击时生成一个冰火技能预制体,预制体会根据玩家的朝向......
  • 改造pdf.js源码,实现业务系统对PDF阅读器的集成(一)——概览与pdf.js启动流程分析
    项目背景最近收到了客户的一个订单——他们想要在自己的系统里面增加一套基于文档的审批流程。审批流程的逻辑是这样的:首先被审批人会发起审批流,并上传相关的Word或PDF文档。这个审批流在进入审批状态后,将会被一个或多个审批人审批。审批人可以在被审批人上传的PDF文档上增加......