JavaScript学习——理解对象

var person={
name:"Nicholas",
age:29,
job:"Software Engineer",

sayName:function(){
alert(this.name);
}
};

1.属性类型

(1)数据属性

[[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认为true。

[[Enumerable]]:表示能否通过for-in循环返回属性。默认为true。

[[Writable]]:表示能否修改属性的值。默认为true。

[[Value]]:包含这个属性的数据值。默认为undefined。

var person={}
Object.defineProperty(person,"name",{
writable:false,
configurable:false,
value:"Nicholas"
});
alert(person.name);//"Nicholas"
person.name="Greg";
alert(person.name);//"Nicholas"
delete person.name;
alert(person.name);//"Nicholas"

不过建议在IE8不使用Object.defineProperty()方法

(2)访问器属性

[[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认为true。

[[Enumerable]]:表示能否通过for-in循环返回属性。默认为true。

[[Get]]:在读取属性时调用的函数。默认为undefined。

[[Set]]:在写入属性时调用的函数。默认为undefined。

//待完善

2.定义多个属性

var book={};
Object.defineProperities(book,{
_year:{
value:2004
},
edition:{
value:1
},
year:{
get function(){
return this._year;
},
set:function(newValue){
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
}
});

3.读取属性的特性

var book={};
Object.defineProperities(book,{
_year:{
value:2004
},
edition:{
value:1
},
year:{
get function(){
return this._year;
},
set:function(newValue){
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
}
});
var descriptor = Object.getOwnPropertyDescriptior(book,"_year");
alert(descriptor.value);//2004
alert(descriptor.configurable);//fasle
alert(typeof descriptor.get);//"undefined"

var descriptor = Object.getOwnPropertyDescriptior(book,"year");
alert(descriptor.value);//undefined
alert(descriptor.configurable);//fasle
alert(typeof descriptor.get);//"function"
原文地址:https://www.cnblogs.com/pilee/p/3447276.html