语法
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 }]