前端JavaScript

Object.definePrototype()属性

2020-04-08  本文已影响0人  晚月川

Object.definePrototype()

定义对象中新属性或修改原有属性

  • Object.definePrototype(obj, prop, descriptor)
    • obj:必需 目标对象
    • prop:必需 需定义或修改的属性的名字
    • descriptor:必需 目标属性所拥有的特性(以对象{}的格式书写)(有四个属性值)
      • value:设置属性值,默认是undefined
      • writable:属性值是否可以被修改,true|falsetrue是可以被修改,false是不可以被修改,默认值是false
      • enumerable:目标属性是否可以被枚举(遍历),true|falsetrue是可以被遍历出来(可以被枚举枚举),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);
});
上一篇下一篇

猜你喜欢

热点阅读