通过类可以创建任意多个具有相同属性和方法的对象。
ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数。”对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。
每个对象都是基于一个引用类型创建的。
创建一个Object的实例:
var person = new Object();
person.name = "Jeff xiao";
person.age = 29;
person.job = "Software engineer";
person.sayName = function(){
alert(this.name);
}
用对象字面量语法
var person = {
name : "zhihui xiao";
age = 25;
job = "SoftWare engineer";
SayName : function() {
alert(this.name);
}
}
ECMA-262第5版定义只有内部才用的特性时,描述了属性的各种特征。
ECMAScript中有两种属性:数据属性和访问器属性。
1.数据属性
数据属性包含一个数据值的位置。
[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。
[[Enumerable]]:表示能否通过for-in循环返回属性。
[[Writable]]:表示能否修改属性的值。
[[Value]]:包含这个属性的数据值。
要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法,这个方法接收三个参数:属性所在的对象,属性的名字和一个描述符对象。
描述对象的属性必须是:configurable,enumerable,writable和value。设置其中的一或多个值,可以修改对应的特性值。
var person = {};
Object.defineProperty(person,"name",{
writable:false,
value:"zhihui xiao"
});
alert(person.name);
person.name="zhihui";
alert(person.name);
把configurable设置为false,表示不能从对象中删除属性,如果对这个属性调用delete,则在非严格模式下什么也不会发生,而在严格模式下会导致错误。而且,一旦把属定义为不可配置的,就不能吧他变回可配置的了。此时,在调用Obejct.defineProperty()方法修改除writable之外的特性,都会导致错误。