Object 的静态方法之 defineProperties 以及数据劫持效果

再提一下什么是静态方法:
  静态方法:在类身上的方法,
  动态方法:在实例身上的方法
Object.defineProperties(obj, props)

obj:被添加属性的对象
props:添加或更新的属性对象

给对象定义属性,
如果存在该属性,则用新定义的属性更新已存在的属性,
如果不存在该属性,则添加该属性。

如果是新添加的属性,一定要设置是否可枚举,不然为false
enumerable(是否可枚举):默认为false
writable(是否可写):默认为false
configurable:是否可删除delete

Object.defineProperty()
在对象上定义新属性,或修改对象现有属性,并返回该对象。

Object.defineProperty(obj, 属性名字, {设置属性})

例子1:
 1      let obj = {
 2          name:'xx',
 3          num:0
 4      };
 5      Object.defineProperties(obj,{
 6          name:{
 7              value:'yy',
 8              writable: false,//是否可重新赋值
 9              enumerable: false,//是否可遍历(枚举)
10              configurable:false//是否可(配置)删除
11          },
12          age:{
13              value:20,
14              enumerable: true
15          }
16      });
17 
18      obj.age = 30;
19      console.log(obj.age);//默认不可写,所以此处依然是  20
20      delete obj.name;//此处删了一个不可删除的属性
21      console.log(obj.name);//当然能显示 yy

例子2:数据劫持 效果

 1      let obj = {
 2          num:4
 3      };
 4      let n = 2;
 5      Object.defineProperty(obj,'num',{
 6          get:function(){   //取 obj.num 属性时会触发 get 方法
 7              /*数据劫持*/
 8              //当你获取这个属性的时候,会调用
 9              n += 2;
10              return n;
11          },
       set(val){ //给 obj.num 赋值时会触发 set 方法
         //val 是给 obj.num 赋值时的那个值

       }
12 }); 13 console.log(obj.num < 5 && obj.num > 5);//true 14 /*num即小于5,又大于,就是应为,第一次判断obj.num时num=(n+=2)=4,符合了第一个条件,此时的n=4。 15 读到第二个判断的时候,再次触发函数,此时n+=之后为6,又符合了第二个判断条件,所以出现了true*/

 

转载于:https://www.cnblogs.com/MrZhujl/p/9938505.html

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

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

相关文章

Spring实现AOP的4种方式

Spring实现AOP的4种方式 先了解AOP的相关术语: 1.通知(Advice): 通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。 2.连接点(Joinpoint): 程序能够应用通知的一个“时机”&#xff0c;这些“时机”就是连接点&#xff0c;例如方法被调用时、…

如何使用Plotly在Python中为任何DataFrame绘制地图的卫星视图

Chart-Studio和Mapbox简介 (Introduction to Chart-Studio and Mapbox) Folium and Geemap are arguably the best GIS libraries/tools to plot satellite-view maps or any other kinds out there, but at times they require an additional authorization to use the Google…

Java入门系列-26-JDBC

认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称&#xff0c;用于连接常用数据库。 Sun 公司提供了 JDBC API &#xff0c;供程序员调用接口和类&#xff0c;集成在 java.sql 和 javax.sql 包中。 Sun 公司还提供了 DriverManager 类用来管理各种不…

3.19PMP试题每日一题

在房屋建造过程中&#xff0c;应该先完成卫生管道工程&#xff0c;才能进行电气工程施工&#xff0c;这是一个&#xff1a;A、强制性依赖关系B、选择性依赖关系C、外部依赖关系D、内部依赖关系 作者&#xff1a;Tracy19890201&#xff08;同微信号&#xff09;转载于:https://…

Can't find temporary directory:internal error

今天我机子上的SVN突然没有办法进行代码提交了&#xff0c;出现的错误提示信息为&#xff1a; Error&#xff1a;Cant find temporary directory:internal error 然后试了下其他的SVN源&#xff0c;发现均无法提交&#xff0c;并且update时也出现上面的错误信息。对比项目文件…

snowflake 数据库_Snowflake数据分析教程

snowflake 数据库目录 (Table of Contents) Introduction 介绍 Creating a Snowflake Datasource 创建雪花数据源 Querying Your Datasource 查询数据源 Analyzing Your Data and Adding Visualizations 分析数据并添加可视化 Using Drilldowns on Your Visualizations 在可视化…

jeesite缓存问题

jeesite&#xff0c;其框架主要为&#xff1a; 后端 核心框架&#xff1a;Spring Framework 4.0 安全框架&#xff1a;Apache Shiro 1.2 视图框架&#xff1a;Spring MVC 4.0 服务端验证&#xff1a;Hibernate Validator 5.1 布局框架&#xff1a;SiteMesh 2.4 工作流引擎…

高级Python:定义类时要应用的9种最佳做法

重点 (Top highlight)At its core, Python is an object-oriented programming (OOP) language. Being an OOP language, Python handles data and functionalities by supporting various features centered around objects. For instance, data structures are all objects, …

Java 注解 拦截器

场景描述&#xff1a;现在需要对部分Controller或者Controller里面的服务方法进行权限拦截。如果存在我们自定义的注解&#xff0c;通过自定义注解提取所需的权限值&#xff0c;然后对比session中的权限判断当前用户是否具有对该控制器或控制器方法的访问权限。如果没有相关权限…

医疗大数据处理流程_我们需要数据来大规模改善医疗流程

医疗大数据处理流程Note: the fictitious examples and diagrams are for illustrative purposes ONLY. They are mainly simplifications of real phenomena. Please consult with your physician if you have any questions.注意&#xff1a;虚拟示例和图表仅用于说明目的。 …

What's the difference between markForCheck() and detectChanges()

https://stackoverflow.com/questions/41364386/whats-the-difference-between-markforcheck-and-detectchanges转载于:https://www.cnblogs.com/chen8840/p/10573295.html

ASP.NET Core中使用GraphQL - 第七章 Mutation

ASP.NET Core中使用GraphQL - 目录 ASP.NET Core中使用GraphQL - 第一章 Hello WorldASP.NET Core中使用GraphQL - 第二章 中间件ASP.NET Core中使用GraphQL - 第三章 依赖注入ASP.NET Core中使用GraphQL - 第四章 GrahpiQLASP.NET Core中使用GraphQL - 第五章 字段, 参数, 变量…

POM.xml红叉解决方法

方法/步骤 1用Eclipse创建一个maven工程&#xff0c;网上有很多资料&#xff0c;这里不再啰嗦。 2右键maven工程&#xff0c;进行更新 3在弹出的对话框中勾选强制更新&#xff0c;如图所示 4稍等片刻&#xff0c;pom.xml的红叉消失了。。。

JS前台页面验证文本框非空

效果图&#xff1a; 代码&#xff1a; 源代码&#xff1a; <script type"text/javascript"> function check(){ var xm document.getElementById("xm").value; if(xm null || xm ){ alert("用户名不能为空"); return false; } return …

python对象引用计数器_在Python中借助计数器对象对项目进行计数

python对象引用计数器前提 (The Premise) When we deal with data containers, such as tuples and lists, in Python we often need to count particular elements. One common way to do this is to use the count() function — you specify the element you want to count …

套接字设置为(非)阻塞模式

当socket 进行TCP 连接的时候&#xff08;也就是调用connect 时&#xff09;&#xff0c;一旦网络不通&#xff0c;或者是ip 地址无效&#xff0c;就可能使整个线程阻塞。一般为30 秒&#xff08;我测的是20 秒&#xff09;。如果设置为非阻塞模式&#xff0c;能很好的解决这个…

经典问题之「分支预测」

问题 来源 &#xff1a;stackoverflow 为什么下面代码排序后累加比不排序快&#xff1f; public static void main(String[] args) {// Generate dataint arraySize 32768;int data[] new int[arraySize];Random rnd new Random(0);for (int c 0; c < arraySize; c)data…

vi

vi filename :打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首 vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首 vi /pattern filename&#xff1a;打开文件&#xff0c;并将光标置…

数字图像处理 python_5使用Python处理数字的高级操作

数字图像处理 pythonNumbers are everywhere in our daily life — there are phone numbers, dates of birth, ages, and other various identifiers (driver’s license and social security numbers, for example).电话号码在我们的日常生活中无处不在-电话号码&#xff0c;…

05精益敏捷项目管理——超越Scrum

00.我们不是不知道它会给我们带来麻烦&#xff0c;只是没想到麻烦会有这么多。——威尔.罗杰斯 01.知识点&#xff1a; a.Scrum是一个强大、特意设计的轻量级框架&#xff0c;器特性就是将软件开发中在制品的数量限制在团队层级&#xff0c;使团队有能力与业务落班一起有效地开…