Object.definePrototype()属性
2020-04-08 本文已影响0人
晚月川
Object.definePrototype()
定义对象中新属性或修改原有属性
Object.definePrototype(obj, prop, descriptor)
obj
:必需 目标对象prop
:必需 需定义或修改的属性的名字descriptor
:必需 目标属性所拥有的特性(以对象{}的格式书写)(有四个属性值)
value
:设置属性值,默认是undefined
writable
:属性值是否可以被修改,true
|false
(true
是可以被修改,false
是不可以被修改,默认值是false
)enumerable
:目标属性是否可以被枚举(遍历),true
|false
(true
是可以被遍历出来(可以被枚举枚举),false则是不可以呗遍历出来(不可被枚举))(默认值是false)configurable
:目标属性是否可以被删除或者是否可以再次修改特性,true
|false
(如果是false
则不允许删除这个属性,如果为true
则可以删除这个属性)(默认值是false)(不允许修改第三个参数里面的特性)
let obj = {
id: 1,
name: '小米',
price: 1999
};
// 以前对象添加和修改属性的方式
obj.num = 1000;
obj.price = 99;
console.log(obj);
// Object.definePrototype()定义对象中新属性或修改原有属性
// 添加方法
Object.definePrototype(obj, 'num',{
value: 1000
});
console.log(obj);
// 修改方法
Object.definePrototype(obj, 'price',{
value: 99
});
console.log(obj);
// 设置不能修改的属性值
Object.definePrototype(obj, 'id',{
// 不允许修改这个属性值
writable: false
});
obj.id = 3;
console.log(obj); //=>不能修改这个属性值,如果是true就可以修改
// 设置属性名是否可以被枚举
Object.definePrototype(obj, 'address',{
value: '火星',
writable: false,
enumerable: false, //=>不可被枚举(不会被遍历出来)
configurable: false //=>不可被删除
});
console.log(obj);
console.log(Object.keys(obj)); //=>num也在这个对象中,也有一个enumerable属性,属性值默认是false
delete obj.address;
console.log(obj); //=>没有被删除
delete obj.name;
console.log(obj); //=>name被删除了
Object.keys()
用于获取对象自身所有的属性(属性名)
Object.keys(obj)
- 效果类似于
for...in
- 返回一个由属性名构成的数组
let obj = {
id: 1,
name: '小米',
price: 1999
};
let arr = Object.keys(obj);
console.log(arr);
arr.forEach(function(value){
console.log(value);
});