java如果描述对象_05 JavaStrip 操作属性描述对象

Object对象私有方法

Object.getOwnPropertyDescriptor(obj,attr) 获取一条属性的描述对象

参数

obj 属性所在的对象

attr 属性名,必需为字符串类型

返回值

返回属性对应描述的对象,如果属性不存在返回undefined

注意

1、此方法在ES5里就有,但ES5里规定第一个参数必需为对象,否则报错;

2、ES6里增加了默认转换的功能,第一个参数如果不是对象类型,会先自动转成对象类型;

3、此方法只能取对象自身的属性,取不到继承的属性;

const gpd=Object.getOwnPropertyDescriptor;

//Object.getOwnPropertyDescriptor(obj,attr)

//ES6会把第一个非对象的参数转成对象

console.log(gpd('str','length')); //{value: 3, writable: false, enumerable: false, configurable: false}

console.log(gpd({},'toString')); //undefined

Object.getOwnPropertyDescriptors(obj) 获取所有属性的描述对象(ES7新增)

与上面方法的区别

1、参数只有一个(对象);

2、永远返回对象,即使没有属性也会返回一个空对象;

3、Object.defineProperty(obj,prop,descriptor) 通过定义属性描述对象,来定义或修改一条属性;

const obj={

name:'luobing',

age:18

};

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

//{

//name: {value: "kaivon", writable: true, enumerable: true, configurable: true}

//age: {value: 18, writable: true, enumerable: true, configurable: true}

//}

Object.defineProperty(obj,prop,descriptor) 通过定义属性描述对象,来定义或修改一条属性

功能

1、修改一条原有属性;

2、增加一条新属性;

3、都能操作属性描述对象;

参数

obj 属性所在的对象(必选)

prop 属性名称,字符串(必选)

descriptor 属性描述对象(必选),里面的字段是可选的

value 默认为undefined

writable 默认为false

enumerable 默认为false

configurable默认为false

get 默认为undefined

set 默认为undefined

返回值

返回修改后的对象

注意

1、如果属性描述对象的configurable为false,此方法不能用;

2、如果属性描述对象的writable为false,不能设置属性的值;

//Object.defineProperties(obj,props)

const div={};

Object.defineProperties(div,{

'name':{

value:'luobing',

writable :true,

enumerable:true,

configurable:true,

},

'age':{

value:18,

writable :false,

enumerable:true,

configurable:false,

},

'work':{

enumerable:true,

configurable:true,

get(){

console.log('你获取了工作')

},

set(){

console.log('你设置了工作')

}

},

'author':{

value:{

'name':'luobing',

'wechat':'kaivon',

'QQ':356985332,

'email':'luobing@qq.com'

},

enumerable:false

}

});

console.log(Object.getOwnPropertyDescriptors(div));

div.work;

div.work='133';

for(let attr in div){

console.log(attr);

}

Object.defineProperties(obj,props);

用法与上面的一样

注意:后两个方法都会很消耗性能,尽量不要大量用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值