每个对象都是基于一个引用类型创建的。
创建一个自定义对象就是创建一个Object的实例。
var person = new Object(); person.name = "Kelly"; person.age = 18; person.job = "SoftWare Engineer"; person.Sayname = function () { alert(this.name); };
使用对象字面量语法可以写成:
var person ={ name: "Kelly", age : 18, job : "SoftWare Engineer", Sayname : function () { alert(this.name); } };
ECMAScript中有两种属性:数据属性和访问属性
数据属性:包含一个数据值的位置,在这个位置可以读取值和写入值。
有4个描述其行为的特性:
[Configurable]表示能否通过delete删除属性从而重新定义属性;能否修改属性的特性;能否把属性修改为访问器属性。默认为true;
[Enumrable]表示能否通过for-in循环返回属性。默认为true;
[Writable]表示能否修改属性值。默认为true;
[Value]包含这个属性的数据值。默认为undefind;
要修改属性默认的特性,应使用Object.defineProperty()方法。该方法接受3个参数:属性所在的对象,属性的名字,四个特性;
不可在IE8中使用;
例如:
Object.defineProperty(person,"name",{} writable:false, value:"Kelly" });
访问器属性:访问其属性不包含数据值;包含一对getter和setter函数。getter读取访问器属性,负责返回有效的值;setter用于传入新值,负责决定如何处理数据。
有以下四个特性:
[Configrable]同上;
[Enumerable]同上;
[Get] 在读取属性时调用的函数;默认undefined;
[Set] 在写入属性时调用的函数;默认undefined;
访问其属性不能直接被定义,必须使用Object.definedProperty()来定义。
var book = { _year:2004,//下划线是一种常用记号,用于表示只能通过对象方法访问的属性。 edition:1 } Object.defineProperty(book,"year",{ get: function() { return this.year; }, set: function (newValue) { if(newValue>2004){ this.year = newValue; this.edition+=newValue -2004; } } });
定义多个属性:
Object.defineProperties()
读取属性的特性:
Object.getOwnPropertyDescriptors();可以。取得给定属性的描述符。该方法接受两个参数:取其描述符的属性属性名称属性所在的对象和要读取其描述符的属性名称,返回值是一个对象。