一文详解 Object.defineProperty

一、涉及内容

Object.defineProperty(obj, prop, descriptor);

Object.defineProperties(obj, props);

Object.preventExtensions(obj);

二、详解

(1)、Object.defineProperty(obj, prop, descriptor)

  1. obj:要定义或修改属性的对象
  2. prop:要定义或修改的属性名,值为一个字符串或Symbol
  3. descriptor:描述符对象,包括:
  • value:数据描述符,默认值为undefined;属性值,任何有效的JavaScript值(数字、函数、对象等)
  • writable:数据描述符,默认值为false,为false时,value不可被更改;为true时,可被更改
  • configurable:属性描述符,默认值为false,为false时,不可删除该属性、不可更改其他属性描述符(writable 若为true,则value可被更改,writable 可被改为false)
  • enumerable:属性描述符,默认值为false,为false时,不可被Object.assign()操作、不会出现在Object.keys()的结果中;为true时,反之
  • get 访问器描述符,默认值为undefined,用作属性getter的函数,没有getter则为undefined,访问属性时,会不带参的调用该函数,返回值用做属性值
  • set 访问器描述符,默认值为undefined,用作属性setter的函数,没有setter则为undefined,属性被赋值时,将携带一个赋值给属性值的参数调用该函数(在此时写一些操作,即完成了对属性值的监听处理功能)
  • 注:若已经设置set或get,则不能设置数据描述符 value、writable了,因为关于value的操作都已经被set或get代理了

(2)Object.defineProperties(obj, props)   同时定义或修改对象的多个属性

  1. obj:要定义或修改属性的对象
  2. prop:对象类型,每个键都表示要定义或修改的属性名,每个值是描述该属性的对象
  3. 示例:
    let person = {};
    Object.defineProperties(person, {
        name: {
            value:'xiaohong',
            configurable: true,
            writable: false,
            enumerable: true
        },
        sex: {
            configurable: false,
            enumerable: true,
            get: function(){
              return this._value;
            },
            set: function(value){
              this._value = value;
            }
    });

(3) Object.preventExtensions(obj) 防止修改对象

let person = {};
Object.defineProperty(person, 'name', { value: 'xiaohong' }); 
Object.preventExtensions(person); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值