1、数据属性
- [[Configurable]]:能否通过delete删除属性从而重新定义属性。默认为true.
- [[Enumerable]]能否通过for-in循环删除属性。默认为true.
- [[Writable]]能否修改属性。默认为true.
- [[Value]]:包含属性的数据值。默认为undefined。
Object.defineProperty()对一个对象的一个方法只能调用一次,否则报cannot redfine property :xxx;
var person = {}
Object.defineProperty(person, "name", {
writable : false,
configurable : false,
value:"zhangsan"
});
person.name = "lisi";
Object.defineProperty(person, "name", {
writable : true
});
document.write("pserson.name: " + person.name);
2、访问器属性- [[Configurable]]:能否通过delete删除属性从而重新定义属性。默认为true.
- [[Enumerable]]能否通过for-in循环删除属性。默认为true.
- [[Get]]在读取属性时调用的函数。默认为undefined.
- [[Set]]:在写入属性时调用的函数。默认为undefined。
var book = {_year:2003,edition:5};
Object.defineProperty(book,"year",{
get:function(){
return this._year;
},
set:function(newValue){
this._year = newValue;
this.edition +=newValue-2003;
}
});
book.year = 2014;
document.write("book.edition: " + book.edition);
3、读取属性的特性使用Object.getOwnPropertyDescriptor方法。eg.
var book = {
_year : 2003,
edition : 5
};
Object.defineProperties(book, {
_year : {
writable : false,
configurable : false
},
year : {
get : function() {
return this._year;
},
set : function(newValue) {
this._year = newValue;
this.edition += newValue - 2003;
}
}
});
book.year = 2014;
var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
console.log("descriptor: ",descriptor);
document.write("book.edition: " + book.edition);
700

被折叠的 条评论
为什么被折叠?



