js object.defineProperty()方法解析

object.defineProperty()方法用于在一个对象上定义一个新属性,或者修改已存在的属性,最终返回一个对象。

语法:Object.defineProperty(obj,prop,desc)    三者均必须

obj:目标对象    prop:需定义或修改的属性名   desc:目标属性所拥有的配置特性

desc包含的全部配置项如下:

value:设定属性的值

writable:值是否可以被编辑重写    boolean    默认值true--可编辑/可重写

enumerable:目标属性是否可以被枚举    boolean     默认值true--可枚举,会被遍历出来

configurable:描述属性是否可以配置、是否可以删除     boolean     默认值true--可配置/可删除

get() :当获取值时触发的函数  ,不设置时为undefined

set():当设置值时触发的函数,设置的新值可以通过value拿到,不设置时为undefined

注意:当使用了存取起get和set方法后,不能使用value和writable,否则会直接报错。

           get 和set不必成对存在,可以只有一个。

举例:

let obj={name:"d",age:20};

console.log(obj);

//{ name: 'd', age: 20 }

console.log(Object.keys(obj));

//[ 'name', 'age' ]

Object.defineProperty(obj,"sex",{

  value:"girl",

  writable:true,

  enumerable:true,

  configurable:true

});

console.log(obj);

//{ name: 'd', age: 20, sex: 'girl' }

obj.sex="boy";

console.log(obj);

//{ name: 'd', age: 20, sex: 'boy' }

console.log(Object.keys(obj));

//[ 'name', 'age', 'sex' ]

obj.name="dlj";

console.log(obj);

//{ name: 'dlj', age: 20, sex: 'boy' }

delete obj.age;

console.log(obj);

//{ name: 'dlj', sex: 'boy' }

Object.defineProperty(obj,"birth",{

  value:"2020-09-09",

  writable:false,

  enumerable:false,

  configurable:false

});

console.log(obj);

//{ name: 'dlj', sex: 'boy', birth: '2020-09-09' }  enumerable:true

//{ name: 'dlj', sex: 'boy'}  enumerable:false

// obj.birth="2121-09-09";

// console.log(obj);

//TypeError: Cannot assign to read only property 'birth' of object '#'

delete obj.brith;

console.log(obj);

//{ name: 'dlj', sex: 'boy', birth: '2020-09-09' }  enumerable:true

//{ name: 'dlj', sex: 'boy' }    enumerable:false

console.log(Object.keys(obj));

//[ 'name', 'sex', 'birth' ]  enumerable:true

//[ 'name', 'sex' ]  enumerable:false

let count=10;

Object.defineProperty(obj,"birth1",{

  get:function(){

    return count;

  },

  set:function(val){

    count=val;

  }

});

console.log(obj.birth1);

//10

obj.birth1=22;

console.log(count);

//22

console.log(Object.keys(obj));

//[ 'name', 'sex' ]

你可能感兴趣的:(js object.defineProperty()方法解析)