JavaScript_笔记10 数据属性和访问器属性
创建对象
创建一个对象:new操作符+Object()创建一个Object实例,并且为它添加属性和方法。
var people = new Object();
people.name = 'kabukiyo';
people.age = 12;
people.job = "engineer";
people.sayName = function(){
alert(this.name);
}
字面量表示法:
var people ={
name:"kabukiyo",
age:12,
job:"engineer",
sayName:function(){
alert(this.name);
}
}
数据属性、访问器属性
ECMAScript有两种属性:数据属性和访问器属性。
数据属性的4个特性
- [[Configurable]] : 表示能否通过delete删除属性从而重新定义属性;表示能否修改数据属性的特性;表示能否把数据属性修改为访问器属性。
- [[Enumerable]] :表示能否通过for-in循环返回属性;
- [[Writable]] :表示能否修改属性的值;
- [[Value]] :包含这个属性的数据值。默认是undefined
注意:若像上面那样定义一个对象,那么它的数据属性的[[Configurable]],[[Enumerable]],[[Writable]]特性都被设置为true,[[Value]]就被设置为指定的值。
Object.defineProperty()修改属性的特性
Object.defineProperty()接手3个参数:属性所在的对象,属性的名字和一个描述符对象(descriptor)。其中描述符对象的属性必须是configurable、enumerable、writable、value。通过Object.defineProperty()可以修改某个对象的某个属性的特性的值。
例1:
var people = {};
Object.defineProperty(people,'name',{
writable:false,
value:"kabukiyo"
});
alert(people.name); //kabukiyo
people.name = "hua";
alert(people.name); //kabukiyo
上述代码描述为:为people对象创建了一个name属性,它的值为kabukiyo,而且这个值是不可写,只可读的。如果在严格模式下,会抛出错误,因为name属性是不可写的;如果在非严格模式下,赋值操作则被忽略。
例2:
var people = {};
Object.defineProperty(people,'name',{
configurable:false,
value:"kabukiyo"
});
alert(people.name); //kabukiyo
delete people.name;
alert(people.name); //kabukiyo
说明:为people对象创建了一个name属性,值为kabukiyo,且它是不可配置的。即name属性不可以被delete删除,不能变成访问器属性,其特性不能被修改。故严格模式下对delete会出现错误,非严格模式下则忽略。
注意: