对象的属性描述

ES5开始加入了对象属性:value(值) writable(可写)、 enumerable(可枚举)和 configurable(可配置)

定义一个 var obj1={x:1}

通过调用Object.getOwnPropertyDescriptor(obj1,x)获取属性描述

{

  value: 1,

  writable: true,

  enumerable: true,

  configurable: true

}

 

当把writable设置为false时 :

var obj1={}

Object.defineProperty(obj1,'x',{

  value: 1,

  writable: false,

  enumerable: true,

  configurable: true

}

obj.x=2;

console.los(obj.x)  //1

再去改变obj.x是无效的

 

当把enumerable设置为false时:

 

var obj1={};
var hasX={}

Object.defineProperty(obj1,'x',{

  value: 1,

  writable: true,

  enumerable: false,

  configurable: true

})

for(var i in obj1){
hasX[i]=i;
}
console.log(hasX) //{}空对象

设置了enumerable为false就无法通过遍历获取对象属性

 

当把configurable设置为false时:

Object.defineProperty(obj1,'x',{

  value: 1,

  writable: true,

  enumerable: true,

  configurable: false

})

 

Object.defineProperty(obj1,'x',{

  value: 1,

  writable: true,

  enumerable: false,//修改

  configurable: false

}) //报 TypeError错误

 

obj1.x=2;

obj1.x //2

delete obj1.x

obj1.x //2

当设置configurable为false时,是单向设置无法撤销的操作,修改属性描述法的时候会产生一个TypeError的错误,也不可以删除该属性,但是可以去设置它的value

 

以下的方法是对对象进行操作的:

Object.preventExtensions 对象禁止扩展属性

 

var obj1= {

  a:2

};

Object.preventExtensions( obj1);

obj1.b = 3;

obj1.b; // undefined

 

Object.seal 对象密封

在禁止扩展的同事标记configurable为false

Object.freeze 冻结 

在Object.seal基础上再设置writable为false 无法修改对象的属性的值

posted on 2017-01-18 11:00  码农Tony  阅读(183)  评论(0)    收藏  举报

导航