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 @ 2018-06-13 15:14  转角90  阅读(104)  评论(0编辑  收藏  举报