在JavaScript中,defineProperty()
和defineProperties()
这两个方法主要是用来定义或者修改对象的内部属性,看下面这段代码:
var person = {};
Object.defineProperty(person, "name", {
value: "Make"
});
alert(person.name);//Make
定义多个属性:
var people = {};
Object.defineProperties(people, {
one:{
value: "Amy"
},
two:{
value: "haki"
},
three:{
value:"Coke"
}
})
alert(people.one)//Amy
alert(people.two)//haki
alert(people.three)//Coke
了解他们的用法之后,我们再来看看下面数据属性的四个描述其行为的特性(ECMAScript中有两种属性:数据属性和访问器属性,其中数据属性包含一个数据值的位置
,在这个位置可以读取和写入值):
- Configurable:能否通过delete删除属性;
- Enumerable:表示能否通过for-in循环返回属性;
- Writable:表示能否修改属性的数据值;
- Value:指定这个属性的数据值,默认值为undefined
用Configurable举个例子,将configurable设为true:
var person = {};
Object.defineProperty(person, "name", {
configurable: true,
value: "Make"
});
alert(person.name);//Make
delete(person.name);
alert(person.name);//undefined
将configurable的值设为false:
var person = {};
Object.defineProperty(person, "name", {
configurable: true,
value: "Make"
});
alert(person.name);//Make
delete(person.name);
alert(person.name);//Make
我们再来看看writable,先将其设为true:
var person = {};
Object.defineProperty(person, "name", {
writable: true,
value: "Make"
});
alert(person.name);//Make
person.name = "Haki";
alert(person.name);//Haki
好,再设为false:
var person = {};
Object.defineProperty(person, "name", {
writable: false,
value: "Make"
});
alert(person.name);//Make
person.name = "Haki";
alert(person.name);//Make
在使用defineProperty()方法创建一个属性时,如果不指定,configurable,enumerable,writable特性的默认值是false。