• JS创建对象(3种方式)

    在 JavaScript 中创建对象的方式有 3 种,简单介绍如下。

    构造对象

    使用 new 运算符调用构造函数,可以构造一个实例对象。具体用法如下:

    var objectName = new functionName(args);

    参数说明如下:

    • objectName:返回的实例对象。
    • functionName:构造函数,与普通函数基本相同,但是不需要 return 返回值,返回实例对象,在函数内可以使用 this 预先访问。
    • args:实例对象初始化配置参数列表。

    示例

    下面示例使用不同类型的构造函数定义各种实例。

    var o = new Object();  //定义一个空对象
    var a = new Array();  //定义一个空数组
    var f = new Function();  //定义一个空函数

    对象直接量

    使用直接量可以快速创建对象,也是最高效、最简便的方法。具体用法如下:

    var objectName = {
        属性名1 : 属性值1,
        属性名2 : 属性值2,
        ...
        属性名n : 属性值n
    };

    在对象直接量中,属性名与属性值之间通过冒号进行分隔,属性值可以是任意类型的数据,属性名可以是 JavaScript 标识符,或者是字符串型表达式。属性于属性之间通过逗号进行分隔,最后一个属性末尾不需要逗号。

    示例1

    下面代码使用对象直接量定义两个对象。

    var o = {  //对象直接量
        a : 1,  //定义属性
        b : true  //定义属性
    }
    var o1 = {  //对象直接量
        "a" : 1,  //定义属性
        "b" : true  //定义属性
    }

    示例2

    属性值可以是任意类型的值。如果属性值是函数,则该属性也称为方法。

    var o = {  //对象直接量
        a : function () {  //定义方法
            return 1;
        }
    }

    示例3

    如果属性值是对象,可以设计嵌套结构的对象。

    var o = {  //对象直接量
        a : {  //嵌套对象
            b : 1
        }
    }

    示例4

    如果不包含任何属性,则可以定义一个空对象。

    var o = {}  //定义一个空对象直接量

    使用 Object.create

    Object.create 是 ECMAScript 5 新增的一个静态方法,用来创建一个实例对象。该方法可以指定对象的原型和对象特性。具体用法如下:

    Object.create(prototype, descriptors)

    参数说明如下:

    • prototype:必须参数,指定原型对象,可以为 null。
    • descriptors:可选参数,包含一个或多个属性描述符的 JavaScript 对象。属性描述符包含数据特性和访问器特性,其中数据特性说明如下。
    • value:指定属性值。
    • writable:默认为 false,设置属性值是否可写。
    • enumerable:默认为 false,设置属性是否可枚举(for/in)。
    • configurable:默认为 false,设置是否可修改属性特性和删除属性。
       

    访问器特性包含两个方法,简单说明如下:

    • set():设置属性值。
    • get():返回属性值。

    示例1

    下面示例使用 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

    示例2

    下面示例使用 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() 函数。

    示例3

    下面示例定义一个对象,使用访问器属性 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

更多...

加载中...