一、Object.defineProperty:给一个对象定义一个新的属性或修改一个对象现有的属性,并且返回这个对象

1.语法:Object.defineProperty(参数1,参数2,参数3)

  参数1:目标对象

  参数2:需要修改或者添加的属性名

  参数3:目标对象属性的一些特征(是一个对象)

  其中参数3中也有一些参数:

    参数1:value:属性值

    参数2:writable:对象属性值是否可被修改,true表示允许,false表示不允许

    参数3:configurable:对象属性是否可被删除,true为允许,false为不允许

    参数4:enumerable:对象属性是否可被枚举(即遍历)

    参数5:get():给一个属性提供getter方法,当访问这个对象的属性值时触发该方法

    参数6:set():给一个属性提供setter方法,当设置这个对象的属性值时触发该方法

二、参数示例

1、value

  1.   var obj = {};
  2.   Object.defineProperty(obj,"name",{value:"Leslie Cheung"});
  3.   Object.defineProperty(obj,"age",{value:22});
  4.   console.log(obj);//Object(是一个Object对象)

2、writable

  1. var obj = {};
  2. Object.defineProperty(obj,"name",{
  3. value:"Leslie Cheung",
  4. writable:false//为false时不允许修改
  5. })
  6. obj.name = "leslie-cheung";
  7. console.log(obj.name);//Leslie Cheung
  8.  
  9. var obj = {};
  10. Object.defineProperty(obj,"name",{
  11. value:"Leslie Cheung",
  12. writable:true//为true时允许修改
  13. })
  14. obj.name = "leslie-cheung";
  15. console.log(obj.name);//leslie-cheung

3、configurable

  1. var obj = {};
  2. Object.defineProperty(obj,"name",{
  3. value:"Leslie Cheung",
  4. configurable:false//为false时不允许被删除
  5. })
  6. delete obj.name;
  7. console.log(obj.name);//Leslie Cheung
  8.  
  9. var obj = {};
  10. Object.defineProperty(obj,"name",{
  11. value:"Leslie Cheung",
  12. configurable:true//为true时允许被删除
  13. })
  14. delete obj.name;
  15. console.log(obj.name);//undefined

4、enumerable

  1. var obj = {name:"Leslie Cheung",age:"20"};
  2. Object.defineProperty(obj,"name",{
  3. enumerable:false//为false时不可被遍历
  4. });
  5. Object.defineProperty(obj,"age",{
  6. enumerable:false//为false时不可被遍历
  7. });
  8. console.log(Object.keys(obj));//[]
  9.  
  10. var obj = {name:"Leslie Cheung",age:"20"};
  11. Object.defineProperty(obj,"name",{
  12. enumerable:true//为true时可被遍历
  13. });
  14. Object.defineProperty(obj,"age",{
  15. enumerable:true//为true时可被遍历
  16. });
  17. console.log(Object.keys(obj));//["name", "age"]

5、get()和set()

  1. var obj = {name:"Leslie Cheung"};
  2. Object.defineProperty(obj,"name",{
  3. get(){
  4. console.log("被访问,触发get()方法");//被访问时触发get()方法
  5. },
  6. set(val){
  7. console.log("被设置了" + val + ",触发set()方法");//被设置时触发set()方法
  8. }
  9. });
  10. obj.name;//输出结果:被访问,触发get()方法
  11. obj.name = "leslie-cheung";//输出结果:被设置了leslie-cheung,触发set()方法
    注意:当使用了get()方法或者set()方法的时候就不能使用valuewritable中的任何一个属性否则会报错

6、for in和Object.keys()的区别

  1. function Person(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }
  5. Person.prototype = {
  6. sex:"男"
  7. }
  8. var man = new Person("Leslie Cheung",20);
  9. console.log(Object.keys(man));//["name", "age"],返回一个数组,数组值为对象自身的属性,不包括继承原型的属性
  10. for(var key in man){
  11. console.log(key);//name age sex,遍历对象可枚举的属性,包括自身的属性,以及继承原型的属性
  12. }

Object.defineProperty的理解的更多相关文章

  1. 浅谈兔兔对Object.defineProperty的理解

    给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象 语法: Object.defineProperty(参数1,参数2,参数3) 参数1:目标对象 参数2:要修改或者添加的属性名称 ...

  2. 理解Object.defineProperty()

    理解Object.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 基本语法:Obj ...

  3. 理解Object.defineProperty函数中的get与set

    defineProperty是什么: 该函数可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象.通俗理解就是: 给对象添加一个新的属性,或者针对对象里的某些属性,可以给这 ...

  4. 深入理解 Object.defineProperty 及实现数据双向绑定

    Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作.何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外 ...

  5. 理解 Object.defineProperty

    理解 Object.defineProperty 本文写于 2020 年 10 月 13 日 Object.defineProperty 用于在一个对象上定义新的属性或修改现有属性并返回该对象. 什么 ...

  6. 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  7. [转] 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  8. Object.defineProperty(o,p,descriptor ) 理解应用

    1. Object.defineProperty  在一个对象上定义一个新属性,或修改一个已经存在的属性, 最终返回这个对象. var __define = this.__define || func ...

  9. 《转》理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

随机推荐

  1. shell字符串数组

    数组 声明数组 declare -a ARRAY_NAME declare -A ARRAY_NAME: 关联数组 注意:两者不可相互转换 数组名和下标(索引) 索引:编号从0开始,属于数值索引 注意 ...

  2. 006-docker-安装-nginx

    1.搜索镜像 docker search nginx 2.拉取合适镜像 docker pull nginx docker images 3.使用镜像 docker run -p 8080:80 --n ...

  3. Node.js之npm使用

    1.使用国内镜像 本人window8系统安装node.js之后,使用npm的命令安装Express一直失败: npm install express -g (以上命令会将 Express 框架安装在当 ...

  4. Git的安装和配置用户名和密码

    在Windows中进行安装.访问https://git-scm.com/,点击Downloads for Windows,我下载的是Git-2.16.2-64-bit.exe.都按照默认选项即可,其中 ...

  5. jsp内置对象学习记录

    1.session,是一个会话保留在服务器端的对象(默认保留时间为30分钟),所以我们可以在session里面放用户信息以便后续的访问便利(缺点:cookie劫持,导致用户数据泄露).案例:(1)同个 ...

  6. js抽红包分配

    将 50000元随机分给10个人,其中3个人必须分到百位数,4个人分到千位数,3个人分到万位数,每个人所得金额 <!DOCTYPE html> <html lang="zh ...

  7. js中var a=new Object()和var a={}有什么区别吗?

    应该是没有区别的,两者都是生成一个默认的Object对象.js和其它语言一样,一切对象的基类都是Object,所以,new Object()和简易的{}是同样的空对象,就是默认的对象.本来我以为{}应 ...

  8. MyBatis基础入门《十二》删除数据 - @Param参数

    MyBatis基础入门<十二>删除数据 - @Param参数 描述: 删除数据,这里使用了@Param这个注解,其实在代码中,不使用这个注解也可以的.只是为了学习这个@Param注解,为此 ...

  9. (4)Python3笔记 之 流程控制

    一.条件控制 # 语法规则 if 变量(或表达式): 语句块1 elif 变量(或表达式): 语句块2 else: 语句块3 #示例 score = 83 if score > 90: prin ...

  10. CRUD简单查询

    一.查询所有数据 select * from car 二.查询指定列 select code , price from car 三.修改查询出的列名 select code as '代号' , nam ...