object.defineProperty()方法

1. 这个方法是ES5新增的。

2. 这个方法的作用是:给对象新增属性,或者设置对象原有的属性。

3. 怎么用?

Object.defineProperty(给哪个对象新增属性, '新增的这个属性名叫啥', {给新增的属性设置相关的配置项key:value对})

4. 第三个参数是属性相关的配置项,配置项都有哪些?每个配置项的作用是啥?

  • value 配置项:给属性指定值
  • writable 配置项:设置该属性的值是否可以被修改。true表示可以修改。false表示不能修改。
  • enumerable 配置项:设置该属性是否可以被遍历。
    • true表示该属性是可以遍历的。(可枚举的,可迭代的。)
    • false表示该属性是不可遍历的。
  • configurable 配置项:设置该属性是否被删除。
    • true表示该属性是可以被删除的。
    • false表示该属性不可以被删除
  • getter方法 配置项:不需要我们手动调用的。当读取属性值的时候,getter方法被自动调用。

getter方法的返回值非常重要,这个返回值就代表读取的这个属性它的值。

  • setter方法 配置项:不需要我们手动调用的。当修改属性值的时候,setter方法被自动调用。

setter方法上是有一个参数的,这个参数可以接收传过来的值。

注意:当配置项当中有setter和getter的时候,value和writable配置项都不能存在。
示例代码:

<body>
    <script>
      // 这是一个普通的对象
      let person = {};
      // 临时变量   
      let temp;
      // 给上面的phone对象新增一个color属性
      Object.defineProperty(person, "name", {
        //value : '章三',
        //writable : true,
        enumerable: false,
        // true表示该属性是可以遍历的。(可枚举的,可迭代的。)
        // false表示该属性是不可遍历的。

        configurable: false,
        // true表示该属性是可以被删除的。
        // false表示该属性是不可以被删除的。
        
        // getter方法配置项
        get: function () {
          console.log("getter方法执行了@@@");
          //return '动态'
          //return this.name  //递归,死循环
          return temp;
        },
        // setter方法配置项
        set: function (val) {
          console.log("setter方法执行了@@@", val);
          //this.name = val  //递归,死循环
          temp = val;
        },
      });
    </script>
  </body>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值