ECMAScript的两种属性

1.1、数据属性

  包含一个数据值的位置,可以进行读取和写入。

  四种特性:调用Object.defineProperty(对象名,属性名,{特性名:特性值(true\false)}) // 默认false

    [[Configurable]]:默认是true ,表示是否可以进行delete属性操作从新定义属性,定义为false以后

      不能再设置为true,此时再次调用Object.defineProperty()除Writable之外都会导致错误

    [[Witable]]:默认是true,设置是否可以修改属性的值

    [[Enumerable]]:默认是true,表示能否通过for-in循环返回属性

    [[Value]]:属性的属性值,默认是undefined

    例如:
      var person = {};
      Object.defineProperty(person,'name',{
        writable:false,
        value:'张山'
      })
    console.log(person.name); // 张山
    person.name = '里斯'
    console.log(person.name); // 张山 并没有修改name属性的值。

    Object.defineProperty(person,'name',{
      configurable:false,
      value:'张山'
    })

    // 报错
    Object.defineProperty(person,'name',{
      configurable:true,
      value:'张山'
    })

1.2、访问器属性:

  不包含属性值,包含setter和getter函数(非必需的)

  四种特性:

    [[configuralbe]]:默认是true,表示是否可以进行delete属性操作从新定义属性,定义为false以后

      不能再设置为true,此时再次调用Object.defineProperty()除Writable之外都会导致错误

    [[Enumerable]]:默认是true,表示能否通过for-in循环返回属性

    [[get]]:默认值是undefined,读取属性值时调用的函数

    [[set]]:默认值是undefined,写入属性值时调用的函数

    访问器属性不能直接定义必须由Object.defineProperty()调用

    例:
      var book = {
        _year:2004,
        edition:1
      }

      Object.defineProperty(book,'year',{
        get:function(){
        return this._year
      },
      set:function(newValue){
        if (newValue > 2004) {
          this._year = newValue;
          this.edition += newValue - 2004;
          console.log(newValue);
        }
      }
    })

    book.year = 2005;
    console.log(book.edition); //2 浏览器不支持的情况下为1

1.3、定义多个属性

  Object.defineProperties(要定义属性的对象,{定义的属性1:{value:值},属性2:{value:值}})

  例:
    var book = {};
    Object.defineProperties(book,{
      _year:{
        value:2004
      },
      edition:{
        value:1
      },
      year:{
        set:function(newValue){
        this._year = newValue;
        this.edition += newValue - 2004;
      },
      get:function(){
        return this._year;
      }
    }
  })
  book.year = 2005;
  console.log(book.edition); //2 浏览器不支持的情况下为1
  此时属性的创建时间是在同一时间

posted @   转角90  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示