一、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

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

2、writable

    var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
writable:false//为false时不允许修改
})
obj.name = "leslie-cheung";
console.log(obj.name);//Leslie Cheung var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
writable:true//为true时允许修改
})
obj.name = "leslie-cheung";
console.log(obj.name);//leslie-cheung

3、configurable

    var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
configurable:false//为false时不允许被删除
})
delete obj.name;
console.log(obj.name);//Leslie Cheung var obj = {};
Object.defineProperty(obj,"name",{
value:"Leslie Cheung",
configurable:true//为true时允许被删除
})
delete obj.name;
console.log(obj.name);//undefined

4、enumerable

    var obj = {name:"Leslie Cheung",age:"20"};
Object.defineProperty(obj,"name",{
enumerable:false//为false时不可被遍历
});
Object.defineProperty(obj,"age",{
enumerable:false//为false时不可被遍历
});
console.log(Object.keys(obj));//[] var obj = {name:"Leslie Cheung",age:"20"};
Object.defineProperty(obj,"name",{
enumerable:true//为true时可被遍历
});
Object.defineProperty(obj,"age",{
enumerable:true//为true时可被遍历
});
console.log(Object.keys(obj));//["name", "age"]

5、get()和set()

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

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

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

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. 网络传输--UDP

    UDP网络编程 一.优缺点 二.套接字socket 三.类型转换 四.UDP发收数据 五.广播和聊天器案例 回到顶部 一.优缺点 UDP : 无连接 (发送端无需确认接收端是否收到), 其主要用途为音 ...

  2. nodejs, vue, webpack 项目实践

    vue 及 webpack,均不需要与nodejs一期使用,他们都可以单独使用到任何语言的框架中. http://jiongks.name/blog/just-vue/ https://cn.vuej ...

  3. sap 调试工具,修改变量值

    1: 点击修改,输入变量值,按enter键.

  4. PHP数组和字符串的处理函数汇总

    大部分数组处理函数array_chunk — 将一个数组分割成多个array_column — 返回数组中指定的一列array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的 ...

  5. Spark --- 启动、运行、关闭过程

    // scalastyle:off println package org.apache.spark.examples import scala.math.random import org.apac ...

  6. throws和throw的区别

    throws是声明在方法上,告诉调用者这个方法可能会出现的问题.格式  :   方法()   throws  自定义异常类(异常类)    就是在这个方法里面会出问题时,new  throw时,    ...

  7. python string method

    嗯,学习其它语言没这样全练过,嘻嘻 //test.py 1 # -*- coding: UTF-8 -*- 2 3 str = "i am worker" 4 print str. ...

  8. 从零开始一起学习SLAM | 神奇的单应矩阵

    小白最近在看文献时总是碰到一个奇怪的词叫“homography matrix”,查看了翻译,一般都称作“单应矩阵”,更迷糊了.正所谓:“每个字都认识,连在一块却不认识”就是小白的内心独白.查了一下书上 ...

  9. jQuery-淡入淡出效果-fadeIn()淡进 fadeOut()淡出 fadeToggle();

    动画高级函数:基于底层函数又进行了封装两大块:简化版的动画函数和万能动画函数简化版动画函数显示/隐藏$().show;  $(...).hide();  强调:无参数的show()/hide()使用的 ...

  10. 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义

    from:http://blog.csdn.net/feiyun0112/article/details/39697955 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问 ...