javascript 属性的特性 二十五

本文深入探讨了JavaScript中如何使用Object.defineProperty及Object.defineProperties方法来精确控制对象属性的行为,包括读写、枚举性和配置性等关键特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据属性的描述符对象的属性有 value 、 writeable 、enumerable 、 configurable 。

存取器属性的描述符对戏那个则是使用get属性和set属性代替value 和writeabe 。其中writeable、enumerable 和 configurable 都是布尔值。

get属性和set属性是函数值。


//如果想设置属性的特征,或者想让新建属性具有某种特殊特性,则需要调用object.fedineProperty(),传入一个要修改的对象,要创建

或者修改的属性的名称以及属性描述符对象:


<!DOCTYPE html>
<lang ="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>


      <script  type="text/javascript">

          var o = {};
          Object.defineProperties(o,"x",{value :1,writable : true,enumerable:false,
          configurable :true
          });

          o.x;
          alert(o.x);

          Object.keys(o);
//keys 方法仅返回可枚举属性和方法的名称。若要返回可枚举的和不可枚举的属性和方法的名称,
          // 可使用 Object.getOwnPropertyNames 函数 (JavaScript)。
          Object.defineProperties(o,"x",{writeable:false});
          o.x = 2
          alert(o.x);

          var p =Object.defineProperties({}, {
              x: {value:1,writeable:true,enumerable:true,configurable:true},
              y: {value:1,writeable:true,enumerable:true,configurable:true },
              r:{
                  get:function () {
                    return Math.sqrt(this.x * this.x + this
                                    .y * this.y)
                  },
                  enumerable:true,
                  configurable:true

              }
          })
          
          Object.defineProperty(Object.prototype,"extend",{
              writeable: true,
              enumerable: false,
              configrable:true,
              value: function (o) {//值就是这个属性
                  var  names = Object.getOwnPropertyNames(o);
                  for (var i = 0; i<names.length ; i++ ) {
                    if (names[i] in this) continue;//如果属性已经存在,则跳过
                    var desc = Object.getOwnPropertyDescriptor(o,names[i]);
                      Object.defineProperty(this,name[i],desc);
                  }
              }
          })
        </script>

</head>
<body>

</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值