在如今比较新的框架中, 好比 reactjs, vuejs中用得不少的一个属性即是vue
Object.defineOPropertyreact
此属性的文档在网上一搜, 其中的几个属性,框架
包括 存取描述符(有set和get的) 和 数据描述符(直接有 value 的就是数据描述符)spa
有 set get 有 value writable enumerable configurablecode
虽然有 set 和 get, 可是定义的时候仍是要用到
enumerable 和 configurable
set 和 get 相似 writable 和 value
其中的 configurable 和 writable 比较让人混淆。对象
configurable 给的说明是 若是为 false , 那么不能够修改, 不能够删除. 但 writable 给的说明是若是设置为 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 控制是否能够枚举.
例如一下的例子,解释了一下 enumerableblog
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, 是没有具体的值的. }