Object.defineProperty方法

本文详细介绍了JavaScript的Object.defineProperty方法,包括如何为对象添加属性、配置项的使用、不可遍历和可修改性设置,以及高级配置如get和set函数的应用。通过实例演示,掌握如何控制属性的可见性和可操作性。
摘要由CSDN通过智能技术生成

这个方法可以给对象添加新的属性

这个方法接受3个参数

Object.defineProperty(1,2,3)
     1:要给哪个对象添加属性
     2:添加的属性名
     3:配置项,里面可以有很多参数

配置项中有很多参数,常见的有如下:

1.value:添加的属性对应的值,默认为undefined
2.enumerable: 表示能否通过for in循环访问属性,默认值为false
3. writable: 表示能否修改属性的值。默认值为false。
4.configurable: 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为false。

例子

 let person = {
            name:'小张',
            address:'北京'
        }
        Object.defineProperty(person,'age',{
            value:18

        })
        console.log(person); //{name: '小张', address: '北京', age: 18}

这里需要注意

1.不可遍历

通过这种方法添加的属性不会参与遍历,遍历对象属性的时候不会出现
这里进行遍历上面得到的person方法

console.log(Object.keys(person)); //['name', 'address']

//这里的Object.keys() 返回一个给定对象遍历后组成的数组,数组由对象属性名组成

如果想要参与遍历就得给配置项添加参数

 Object.defineProperty(person,'age',{
            value:18,
            enumerable:true//可以让新添加的属性参与遍历
        })

2.不可以被修改

 Object.defineProperty(person,'age',{
            value:18,
            enumerable:true,
            writable:true //可以让新添加的属性可以被修改

        })

3.不可以被删除

 Object.defineProperty(person,'age',{
            value:18,
            enumerable:true,
            writable:true,
            configurable:true //可以控制属性是否可以删除

        })

上面的都是基本配置项,下面说一下高级配置项

  		let number = 18;
        let person = {
            name:'张三',
            sex:'男', 
        }
         Object.defineProperty(person,'age',{
			//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是  age的值
             get:function() {
                	return number
             },

             //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
            set:function(value) {
            		console.log('有人修改了age值,且修改值为',value);
                 	number = value;
             }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Object.defineProperty是一个用来在一个对象上定义新属性或者修改已存在属性方法。[2]它可以通过设置属性的描述符来控制属性的行为,包括属性的可枚举性、可配置性、可写性以及属性的值等。通过使用Object.defineProperty,我们可以实现对对象属性的监听和控制,从而实现双向数据绑定。 举个简单的例子,假设我们有一个名为person的对象,其中包含name和age两个属性,我们可以通过使用Object.defineProperty添加一个新的属性sex,并设置它的值为男。代码如下: let person = { name:"码农", age: 18 } Object.defineProperty(person,'sex',{ value:"男" }) console.log(person) 运行以上代码,我们可以在控制台中看到person对象中已经添加了一个名为sex的属性,其值为男。这就是Object.defineProperty的基本用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue源码学习之Object.defineProperty对象属性监听](https://download.csdn.net/download/weixin_38663151/14904644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Object.defineproperty方法(详解)](https://blog.csdn.net/weixin_57677300/article/details/126278467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值