Object.defineProperty的用法详解

该方法是es5的方法(千万不要觉得是es6的哦),做用是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。(切记只能用在对象身上不能用在数组身上es6

一、语法

Object.defineProperty(obj, prop, descriptor)复制代码

二、参数说明:

  • obj:必需。目标对象 
  • prop:必需。需定义或修改的属性的名字
  • descriptor:必需。目标属性所拥有的特性

三、属性使用案例

修改某个属性的值时,给这个属性添加一些特性。typescript

let person = {}; 
Object.defineProperty(person, 'name', {   
    writable: true || false,   
    configurable: true || false,   
    enumerable: true || false,  
    value:'gjf' 
});
复制代码

属性详解:数组

  • writable:是否能够被重写,true能够重写,false不能重写,默认为false。
  • enumerable:是否能够被枚举(使用for...in或Object.keys())。设置为true能够被枚举;设置为false,不能被枚举。默认为false。
  • value:值能够使任意类型的值,默认为undefined
  • configurable:是否能够删除目标属性或是否能够再次修改属性的特性(writable, configurable, enumerable)。设置为true能够被删除或能够从新设置特性;设置为false,不能被能够被删除或不能够从新设置特性。默认为false。

四、存取器描述(get和set)

  • 注意:当使用了getter或setter方法,不容许使用writable和value这两个属性

let person = {};
let n = 'gjf';
Object.defineProperty(person, 'name', { 
    configurable: true,  
    enumerable: true, 
    get() {    
        //当获取值的时候触发的函数    
        return n  
    },  
    set(val) {    
        //当设置值的时候触发的函数,设置的新值经过参数val拿到    
        n = val;  
    }
});
console.log(person.name) //gjf
person.name = 'newGjf'
console.log(person.name) //newGif复制代码
相关文章
相关标签/搜索