在 JavaScript 中创建对象的方式有 3 种,简单介绍如下。
使用 new 运算符调用构造函数,可以构造一个实例对象。具体用法如下:
- var objectName = new functionName(args);
参数说明如下:
下面示例使用不同类型的构造函数定义各种实例。
- var o = new Object(); //定义一个空对象
- var a = new Array(); //定义一个空数组
- var f = new Function(); //定义一个空函数
使用直接量可以快速创建对象,也是最高效、最简便的方法。具体用法如下:
- var objectName = {
- 属性名1 : 属性值1,
- 属性名2 : 属性值2,
- ...
- 属性名n : 属性值n
- };
在对象直接量中,属性名与属性值之间通过冒号进行分隔,属性值可以是任意类型的数据,属性名可以是 JavaScript 标识符,或者是字符串型表达式。属性于属性之间通过逗号进行分隔,最后一个属性末尾不需要逗号。
下面代码使用对象直接量定义两个对象。
- var o = { //对象直接量
- a : 1, //定义属性
- b : true //定义属性
- }
- var o1 = { //对象直接量
- "a" : 1, //定义属性
- "b" : true //定义属性
- }
属性值可以是任意类型的值。如果属性值是函数,则该属性也称为方法。
- var o = { //对象直接量
- a : function () { //定义方法
- return 1;
- }
- }
如果属性值是对象,可以设计嵌套结构的对象。
- var o = { //对象直接量
- a : { //嵌套对象
- b : 1
- }
- }
如果不包含任何属性,则可以定义一个空对象。
- var o = {} //定义一个空对象直接量
Object.create 是 ECMAScript 5 新增的一个静态方法,用来创建一个实例对象。该方法可以指定对象的原型和对象特性。具体用法如下:
参数说明如下:
访问器特性包含两个方法,简单说明如下:
下面示例使用 Object.create定义一个对象,继承 null,包含两个可枚举的属性 size 和 shape,属性值分别为 "large" 和 "round"。
- var newObj = Object.create (null, {
- size : { //属性名
- value : "large", //属性值
- enumerable : true //可以枚举
- },
- shape : { //属性名
- value : "round", //属性值
- enumerable : true //可以枚举
- }
- });
- console.log(newObj.size); //large
- console.log(newObj.shape); //round
- console.log(Object.getPrototypeOf(newObj)); //null
下面示例使用 Object.create 定义一个与对象直接量具有相同原型的对象。
- var obj = Object.create(Object.prototype, { //继承Obj.prototype原型对象
- x : {
- value : undefined, //属性值
- writable : true, //可写
- configurable : true, //可以配置
- enumerable : true //可以枚举
- }
- });
- console.log("obj.prototype = " + Object.getPrototypeOf(obj)); //"obj.prototype =[object, Object]"
Object.getPrototypeOf() 函数可获取原始对象的原型。如果要获取对象的属性描述符,可以使用 Object.getOwnPropertyDescriptor() 函数。
下面示例定义一个对象,使用访问器属性 b 来读写数据属性 a。
- var obj = Object.create(Object.prototype, {
- a : { //数据属性a
- writable : true,
- value : "a"
- },
- b : { //访问器属性b
- get : function () {
- return this.a;
- },
- set : function (value) {
- this.a = value;
- },
- }
- });
- console.log(obj.a); //"a"
- console.log(obj.b); //"a"
- obj.b = 20;
- console.log(obj.b); //20