数据属性特性:[[value]] [[writable]] [[enumerable]] [[configurable]]
访问器属性特性:[[enumerable]] [[configurable]] [[set]] [[get]]
要想修改属性默认的特性,就得用Object.defineProperty() 和 Object.defineProperties();
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;
}
}
});
book.year = 2005;
alert(book.edition);
var book = {};
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1,
writable: true
},
year: {
get: function() {
return this._year;
},
set: function(newValue) {
if(newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
book.year = 2005;
alert(book.edition);
上面两者等同
好像实现了类似public private那种修改和访问的权限