用最通俗的话讲一下Object.defineProperty()

在网上搜索关于Object.defineProperty()的文章,说的有的很详细,但是感觉都太复杂了,我来用最简单的描述讲一下吧

Object.defineProperty()是为对象添加属性的方法,并且添加的属性可以控制(删,改,查)=》(删除、修改、枚举)

用法

Object.defineProperty(obj,name,{

在这写属性描述

})

obj

就是你想为其增加属性的对象

name

你想增加的属性名

{

}

你增加的属性描述:这里边一共有六个值

1、value(设置的属性值、注意不能与2、3、同时使用)

2.get(是个函数,返回值就是你想设置的属性值)

3.set(是个函数、修改你设置的属性值)

4.writable:(布尔值,是否可修改设置的属性值,默认false;不能与 3 同时使用)

5.enumerable:(布尔值 是否可枚举,默认false)

 6 configurable:(布尔值 是否可删除 默认false)

示例

1.通过value设置属性值

var a={}

Object.defineProperty(a,'name',{

    value:'菜鸟'

})

console.log(a)    //{name:‘菜鸟’}

console.log(a.name)    //菜鸟

a.name='牛人'      

console.log(a)    //{name:‘菜鸟’}

console.log(a.name)    //菜鸟

发现没变也没报错        是的,因为没有设置writable,所以writable默认false;不可修改,你可以自己尝试一下

*

    1.当writable为true configurable为false时,可以通过a.name='菜鸟'的方式赋值也可以通过Object.defineProperty(a,'name',{})方式赋值

    2.当writable为false configurable为false时   不可进行重新赋值,Object.defineProperty(a,'name',{})方式赋值会报错   自己试

    2.当writable为false configurable为true时  可通过Object.defineProperty(a,'name',{})方式赋值

*

2.通过set 和get设置和获取属性值

let a={}

let val

Object.defineProperty(a,'name',{

    get(){

        return val

    },

    set(va){

        val=va

    }

})

console.log(a)  // {}

console.log(a.name)  // undefined

a.name='菜鸟'      =》这样设置值-> 调用setter

console.log(a)  // {}

console.log(a.name)  // 菜鸟

看出和value的区别了吗,及时设置了属性,打印的时候也打印不出来的

结语

我这只是快速交给你使用和理解,想深入探究可以去看《你不知道的javascript》

你可能感兴趣的:(用最通俗的话讲一下Object.defineProperty())