1 描述

  该方法允许精确地添加或修改对象的属性。可以对已有的属性进行获取及修改,也可以添加新的属性并进行操作。

2 方法参数

  Object.defineProperty(操作的对象,添加的属性的名称,属性描述对象)

3 属性描述对象说明

  里面可以添加属性和函数

3.1 属性

3.1.1 说明

  1)value:添加的属性的值,默认undifiend

  2)enumerable:该属性是否可以被遍历,默认false

  3)writable:该属性是否可以编辑,默认false

  4)configurable:该属性是否可以被删除:默认false

3.1.2 示例

1)代码

<script>

        let a = {
name:'张三',
gender:'男'
}
Object.defineProperty(a,'age',{
value:18,
enumerable:true, //该属性是否可以被枚举(遍历),默认false
writable:true, //该属性是否能被编辑,默认false
configurable:true //该属性是否能被删除,默认false
}) for(let key in a){
console.log(a[key])
} </script>

2)运行结果

3.2 函数

3.2.1 getter函数

   当访问该属性时,会调用此函数。执行时不传入任何参数。该函数的返回值会被用作属性的值。也就是说拿属性的值就是拿该方法的返回值


3.2.2 setter函数

  setter 函数,当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。

3.2.3 示例1

  当如下编码时,a对象中age会在初始化的时候把number的值赋给它

  之后,对number或者age属性修改都不会影响到对方

        let number = 18
        let a = {
            name:'张三',
            gender:'男',
            age:number
        }

3.2.2 示例2

  当如下编码时,a对象中age会在初始化的时候把number的值赋给它

  之后,对number或者age属性修改也都不会影响到对方

<script>

        let number = 18
        let a = {
            name:'张三',
            gender:'男',
        }         Object.defineProperty(a,'age',{
            value:number,
       enumerable:true, //该属性是否可以被枚举(遍历),默认false
writable:true, //该属性是否能被编辑,默认false
configurable:true //该属性是否能被删除,默认false
        })             

</script>

3.2.4 示例3

  如下编码,使用getter函数。

  发现,每次去获取age的值,都是调用getter函数,获取到的是getter的返回值

  在这里,getter返回的是number,所以修改number后,获取age,age也会同步变化

  但是,修改age的值,number不会变化,且再去获取age的值,获取到的还是number,而不是修改后的age值。看似改了age的值,却又没改

 <script>

        let number = 18
        let a = {
            name:'张三',
            gender:'男',
        }         Object.defineProperty(a,'age',{
            get(){
                return number
            }
        })
            </script>

3.2.5 示例4

  使用setter和getter函数

  在修改age的值的时候,调用setter函数,setter函数,接收到了修改的值

  在这里,在setter函数里面,把接收到的值赋值给number,所以修改age的值,number的值就变化了,同时,getter函数返回的也是number,获取age,获取到的是number,也一样改变了

<script>

        let number = 18
        let a = {
            name:'张三',
            gender:'男',
        }         Object.defineProperty(a,'age',{
            get(){
                console.log('get方法调用')
                return number
            },             set(value){
                console.log('set方法调用')
                number = value
            }
        })
            </script>

3.2.6 示例

  下面同意使用setter和getter函数。

  setter函数,并没有把接收到的值给number,而是给了一个固定值666

  getter函数,不是返回的number,而是返回固定值123

  所以,我们修改number值,获取到了age却还是123

  修改age属性,不论修改的值是什么,number的值总是666,获取age值还是123

<script>

        let number = 18
let a = {
name:'张三',
gender:'男',
} Object.defineProperty(a,'age',{
get(){
console.log('get方法调用')
return 123
},
set(value){
number = 666
}
}) </script>

最新文章

  1. salesforce 零基础学习(四十五)Approval Lock &amp; UnLock相关注意事项
  2. C语言 第五章 循环结构
  3. prism4 StockTrader RI 项目分析一些体会2
  4. javascript_core之正则、Math、Date
  5. Powershell查看SSAS Cube占用磁盘空间
  6. Node.js学习系列总索引
  7. RadioButton 组,ComboBox用法:
  8. C#中结构体的声明
  9. JavaScript高级程序设计(第三版)学习笔记22、24、25章
  10. COJN 0485 800503寻找平面上的极大点
  11. MFC 操作控件数据
  12. richedit设置滚动条的位置和更新内容
  13. vue中使用百度地图,悬浮窗搜索功能
  14. WinForm登录验证
  15. JS购物车编辑
  16. filter运行出现 &lt;filter object at 0x000001B68F052828&gt; 判断素数
  17. HDU 2012 素数判定
  18. mysql系列一、mysql数据库规范
  19. dhcp、tftp及pxe简介
  20. DoTween动画中的几种函数。

热门文章

  1. 解决win7连接蓝牙耳机播放设备找不到的问题
  2. Permanently added the RSA host key for IP address &#39;192.30.253.113&#39; to the list of known hosts.
  3. uni 结合vuex 编写动态全局配置变量 this.baseurl
  4. 数据结构学习——BST删除特定节点
  5. python中函数教程
  6. echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新
  7. 04.Javascript学习笔记3
  8. Python:界面开发,wx入门篇
  9. SQL语句查询关键字:where筛选、group by分组、distinc去重、order by排序、limit分页、操作表的SQL语句布补充
  10. Django ValueError: HTTP status code must be an integer from 100 to 599.