Object.defineProperty是干什么的?

语法
Object.defineProperty(obj,prop,descriptor)
// obj--要在其上定义属性的对象,prop--要定义或修改的属性的名称,descriptor--将被定义或修改的属性描述符
与点运算符的异同
var person={};  
person.num=1;
相当于
Object.defineProperty(person,'num',{
  value:1, 
  writable : true,
  configurable : true,
  enumerable : true
})
但是:
Object.defineProperty(person,'num',{
  value:1, 
  writable : false
})
person.num=2;
console.log(person.num);//1
存取描述符
  • get
    -- 给属性提供getter的方法

  • set
    -- 给属性提供setter的方法

function Archiver() {
  var temperature = null;
  var archive = [];

  Object.defineProperty(this, 'temperature', {
    get: function() {
      console.log('get!');
      return temperature;
    },
    set: function(value) {
      temperature = value;
      archive.push({ val: temperature });
    }
  });

  this.getArchive = function() { return archive; };
}

var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]

你可能感兴趣的:(Object.defineProperty是干什么的?)