创建对象


对象字面量

创建对象最简单的方法就是使用对象字面量:

var empty = {};
var point = {x:1, y:2};
var book = {
    "title": "JavaScript",
    "subtitle": "权威指南",
    "author": "学院君"
};

对象直接量是个表达式,每次运算都会创建并初始化一个新的对象,每次计算对象直接量的时候,也都会计算每个属性的值,如果在一个重复调用的函数中的循环体内使用了对象直接量,将会创建很多对象,并且对应的属性值也不尽相同。这一点需要注意。

通过 new 创建对象

使用 new 关键字是通过调用构造函数来创建并初始化新对象。JavaScript 核心中的原始类型都包含内置构造函数:

var o = new Object();
var a = new Array();
var d = new Date();
var r = new RegExp('laravel');

当然,自定义对象也可以定义构造函数并通过 new 关键字来创建并初始化。

原型

在讲述第三种对象创建技术之前,我们先解释下什么是原型。

每个 JavaScript 对象(null除外)都和另一个对象关联,「另一个对象」就是原型,每个对象都从原型继承属性。

所有通过对象直接量创建的对象都有同一个原型对象,该对象的引用可以通过 Object.prototype 获取。通过 new 关键字创建的对象的原型是构造函数的 prototype 属性的值,比如 new Object() 创建对象的原型自 Object.prototypenew Array() 创建对象的原型是 Array.prototype,依次类推。

没有原型的对象不多,Object.prototype 就是其中之一,它不继承任何属性,而其它原型对象都是普通对象,普通对象都有原型,所有内置构造函数都具有一个继承自 Object.prototype 的原型,例如 Array.prototype 的属性继承自 Object.prototype,因此通过 new Array() 创建的 Array 对象同时继承自 Array.prototypeObject.prototype,这一系列链接的原型对象就是所谓的「原型链」。

Object.create()

ECMAScript 5 定义了一个名为 Object.create() 的静态函数用于创建新对象,该方法第一个参数就是这个对象的原型,第二参数可选,用于对对象的属性进行进一步的描述(这是一种通过继承方式创建对象的方法):

Object.create()

如果要创建一个空对象可以通过这种方式(等价于 var o2 = new Object()):

var o2 = Object.create(Object.prototype);

如果要兼容低版本 ECMAScript 实现,可以通过下面的方法来创建新对象:

function inherit(p) {
    if (p == null) throw TypeError();
    if (Object.create)
        return Object.create(p);
    var t = typeof p;
    if (t !== 'function' && t !== 'object') throw TypeError();
    function f() {};
    f.prototype = p;
    return new f(); 
}

Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 对象概述

>> 下一篇: 属性的查询和设置