再提一下什么是静态方法:
  静态方法:在类身上的方法,  动态方法:在实例身上的方法
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

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

  1. 第二十七章 数据劫持

    一.现在的开发方式 1.现实中的开发,很少使用原声JS,不是因为JS不强大,主要是因为操作比较繁琐,几乎所有的公司都在使用框架,比如vue.react 2.特点:数据驱动视图.也就是数据发生变化以后, ...

  2. 前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)

    前端面试题 HTML5 相关面试题 CSS3 相关面试题 盒子模型 盒子水平垂直居中的方案 经典布局方案 圣杯布局 双飞翼布局 flex布局 定位方式布局 css实现三角形 JS 相关面试题 8种数据 ...

  3. vue 数据劫持详解

    2019独角兽企业重金招聘Python工程师标准>>> 首先 Object.defineProperty(obj,prop,descriptor) 用法介绍: 参数 obj:目标对象 ...

  4. Vue2 MVVM 双向绑定(数据劫持+发布者-订阅者模式)

    参考文献:https://www.cnblogs.com/libin-1/p/6893712.html https://juejin.im/post/5b2f0769e51d45589f46949e ...

  5. javascript --- [有趣的条件]双等号的隐式调用和数据劫持

    1 双等号的隐式调用和数据劫持 求下面条件,在a为什么样时,等号成立 if(a == 1 && a == 2 && a == 3){console.log('等号成立' ...

  6. vue中数据劫持代理

    1.vue中的数据劫持代理指的是开发者调用或修改组件data里的某个属性时可以直接使用this.属性名,而不用写成this.data.属性名 2.实现原理主要就是用到了Object.definePro ...

  7. 实现简易版vue2(数据劫持,观察者,发布订阅)

    仅笔记使用,如果想要下面代码的视频,关注公众号"程序江",回复001 html使用下面js文件的例子 <!DOCTYPE html> <html lang=&qu ...

  8. 【Vue知识点】——Vue2和Vue3的数据劫持

    文章目录 数据劫持 为什么在data中定义的数据会自动携带get.set属性方法呢? 数据劫持 data与_data Object.DefineProperty Object.DefineProper ...

  9. MVVM理解 ——(2)数据劫持

    数据劫持 – 在使用或者设置某的对象的属性的时候,通过一系列的代码拦截此次的此次的行为.即可以在赋值过程中添加一些操作或者修改返回的结果. 例如: 对象设置一个 a = {name: 1}; 在进行赋 ...

最新文章

  1. App性能分析数据监控
  2. TensorFlow之图结构与TensorBoard可视化
  3. linux系统CPU,内存,磁盘,网络流量监控脚本
  4. IntelliJ IDEA快捷键总结
  5. Sql2008的行列转换之行转列
  6. kFreeBSD有活过来的迹象?UbuntuBSD
  7. 记一次httpclient调用失败
  8. Android phone xp 华为3x,3000mAh大电池 华为荣耀3X续航能力实测
  9. oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
  10. Wazuh--一个完善的开源EDR产品
  11. uwsgi+django在ubuntu下命令部署亲测ok
  12. python操作docx入门教程
  13. yum 安装、 rpm安装、 源码编译安装
  14. hprose-php教程,PHP RPC框架 hprose 上手玩玩
  15. 跳过Android6.0+权限的方法
  16. msp430单片机c语言开发,MSP430单片机开发总结
  17. 学1个月爬虫就月赚6000?告诉你爬虫的真实情况!
  18. 64位Windows10+Code::Blocks+CUDA安装教程
  19. 电脑上怎么发出电子版准考证
  20. 微信小程序 SOTER 生物认证DEMO,指纹识别

热门文章

  1. 链表排序c++代码_[链表面试算法](一) 链表的删除-相关题型总结(6题)
  2. vim ctags java源码_如何使用vim的插件Ctags查看Linux源码
  3. 头同尾合十的算法_乘法速算之首同尾合十
  4. PE 头文件 IMAGE_NT_HEADER
  5. leetcode 134. 加油站 思考分析
  6. OpenCV实战【2】HOG+SVM实现行人检测
  7. 判断字符串是否构成回文_构成字符串回文的最小删除数
  8. python 示例_Python中带有示例的关键字除外
  9. python 整数 1字节_Python程序打印代表整数的字节数组
  10. C---编写程序:实现一个随堂测试,能进行加减乘除运算。要求如下:(1)随机产生两个1~10的正整数,在屏幕上输出题目,如:5+3=?(2)学生输入答案,程序检查学生输入答案是否正确,若正确,