在现在比较新的框架中, 比如 reactjs, vuejs中用得很多的一个属性便是

Object.defineOProperty

此属性的文档在网上一搜, 其中的几个属性,

包括 存取描述符(有set和get的) 和 数据描述符(直接有 value 的就是数据描述符)

有 set get 有 value writable enumerable configurable

虽然有 set 和 get, 但是定义的时候还是要用到
enumerable 和 configurable set 和 get 类似 writable 和 value

其中的 configurable 和 writable 比较让人混淆。

configurable 给的说明是 如果为 false , 那么不可以修改, 不可以删除.
但 writable 给的说明是如果设置为 false, 不可以采用 数据运算符 进行赋值
所以这里就有一部分交叉. 如果 writable 为 true 的时候, configurable 为 false , 
那结果会怎么样呢?
 
写一下具体的例子, 比如
var o = {}; // 创建一个新对象
Object.defineProperty(o, "a", {
value : "original",
writable : false, // 这个地方为 false
enumerable : true,
configurable : true
}); o.a = "new"; //此时候, 是更改不了 a 的. var o = {}; // 创建一个新对象
Object.defineProperty(o, "a", {
value : "original",
writable : true,
enumerable : true,
configurable : false //这里为false
});
o.a = "new";//此时候, a 进行了改变
//但是如果
delete o.a //将返回 false, 并且 a 没有被删除
//结论

此刻我们看来, 对于我们的影响, 目前来看, 主要是
configurable 控制是否可以删除 writable 控制是否可以修改(赋值)
当然 enumerable 控制是否可以枚举.

例如一下的例子,解释了一下 enumerable

var o = {}; // 创建一个新对象
Object.defineProperty(o, "a", {
value : 37,
writable : true,
enumerable : false,//此处设置为false, 在枚举的时候会忽略
configurable : true
}); for(var i in o){
console.log(o[i]); // undefined, 是没有具体的值的.
}

Object.defineProperty 中的 writable 和 configurable 和 enumerable 的理解的更多相关文章

  1. Object.defineProperty 中 get set 用法

    就是两个函数,只要搞清楚get.set的执行时机就可以了.执行时机如下代码: <!DOCTYPE html> <html lang="en"> <he ...

  2. js中的Object.defineProperty()和defineProperties()详解

    ECMAS-262第5版在定义只有内部采用的特性时,提供了描述了属性特征的几种属性.ECMAScript对象中目前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描述 ...

  3. Js中的Object.defineProperty

    通过Object.defineProperty为对象设置属性,并同时规定属性的属性(可见性,可配置性,可枚举性等) 备注:如果通过var obj = {} obj.age = 18这种方式设置的属性, ...

  4. javascript之Object.defineProperty的奥妙

    直切主题 今天遇到一个这样的功能: 写一个函数,该函数传递两个参数,第一个参数为返回对象的总数据量,第二个参数为初始化对象的数据.如: var o = obj (4, {name: 'xu', age ...

  5. Object.defineProperty

    属性类型ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现JavaScript引擎用的,因此在Ja ...

  6. Object.defineProperty()方法的用法详解

    Object.defineProperty()函数是给对象设置属性的. Object.defineProperty(object, propertyname, descriptor); 一共有三个参数 ...

  7. 理解Object.defineProperty的作用

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

  8. [VUE]object.defineProperty的基本使用

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

  9. 深入了解Object.defineProperty

    原来写文章都是一次写两三个小时写完,偶尔看到一个人的博客了解到还有草稿箱这个功能,所以以后写文章的时候就舒服多了哈哈,可以存起来再发,不需要一口气写完了 最近一直在看JavaScript高级程序设计, ...

随机推荐

  1. linux不同服务器SSH连接与数据传送

    linux不同服务器通过SSH连接 SCP 命令进行数据传送 1. 安装scp yum install -y openssh-client 2.命令 复制文件(本地>>远程):scp /h ...

  2. poj-3404 Bridge over a rough river Ad Hoc

    Bridge over a rough river POJ - 3404 Bridge over a rough river Time Limit: 1000MS   Memory Limit: 65 ...

  3. SpringCloud之Eureka详细的配置

    介绍 SpringCloud是一个完整的微服务治理框架,包括服务发现和注册,服务网关,熔断,限流,负载均衡和链路跟踪等组件. SpringCloud-Eureka主要提供服务注册和发现功能.本文提供了 ...

  4. 使用 Xbox Game 录制桌面视频(录制音频)

    使用 Xbox Game 录制桌面视频(附带音频) 前言:可能自己音频输出的问题,一直无法用工具录制桌面的音频,而最后发现利用 Xbox Game 录制游戏视频的功能很好地解决我们的问题. 1)打开游 ...

  5. 锁定文件失败,打不开磁盘“D:\biehl\centos\taotao\taotao-dubbo-register\CentOS-000001.vmdk”或它所依赖的某个快照磁盘。模块“Disk”启动失败。未能启动虚拟机

    1.锁定文件失败,打不开磁盘“D:\biehl\centos\taotao\taotao-dubbo-register\CentOS-000001.vmdk”或它所依赖的某个快照磁盘.模块“Disk” ...

  6. WPF Button IsMouseOver Background

    https://stackoverflow.com/questions/17259280/how-do-you-change-background-for-a-button-mouseover-in- ...

  7. 微信接口调用'updateTimelineShareData','updateAppMessageShareData' 的踩坑记录

    6月份新版微信客户端发布后,用户从微信内的网页分享消息给微信好友,以及分享到朋友圈,开发者将无法获知用户是否分享完成.具体调整点为: ()分享接口调用后,不再返回用户是否分享完成事件,即原先的canc ...

  8. spring boot入门,看这篇文章就够了

    一.SpringBoot入门 1.基本介绍 简化Spring应用开发的一个框架.整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 优点: 快速创建独立运行的Spring项目以及与主 ...

  9. Java基础—实现多线程的三种方法

    Java虚拟机(JVM,是运行所有Java程序的抽象计算机,是Java语言的运行环境)允许应用程序并发地运行多个线程.在Java语言中,多线程的实现一般有以下三种方法: 1.实现Runnable接口, ...

  10. 深入浅出JVM的锁优化案例

    锁优化 适应性自旋(Adaptive Spinning) 线程阻塞的时候,让等待的线程不放弃cpu执行时间,而是执行一个自旋(一般是空循环),这叫做自旋锁. 自旋等待本身虽然避免了线程切换的开销,但它 ...