zoukankan      html  css  js  c++  java
  • 创建对象

    在javascript中,有以下三种创建对象的方式:对象直接量、关键字new和ECMAScript 5中的Object.create()函数。

    一、对象直接量

    对象直接量是由若干键/值对组成的映射表,整个映射表用花括号括起来。属性名可以是javascript标识符也可以是字符串直接量(包括空字符串)。属性的值可以是任意类型的javascript表达式,表达式的值(可以是原始值也可以是对象值)就是这个属性的值。

    ECMAScript5和ECMAScript3中的一些区别:在ECMAScript5(以及ECMAScript 3的一些实现)中,保留字可以用做不带引号的属性名,而在ECMAScript 3中,使用保留字作为属性名必须使用引号引起来;在ECMAScript 5中(以及ECMASCript 3的大部分实现中),对象直接量中的最后一个属性后的逗号将忽略,但在IE8-中则报错。

    对象直接量是一个表达式,它的每次运算都会创建并初始化一个新的对象,也都会计算它的每个属性的值。如果在一个重复调用的函数中的循环内使用了对象直接量,它将创建很多新对象,并且每次创建的对象的属性值也有可能不同。

    下面是一些例子:

    var empty={};//没有任何属性的对象
    var book={
        "main title":"javascript",//属性名字里有空格,必须用字符串表示
        "sub-title":"the definitive guide",//属性名字里有连字符,必须用字符串表示
        "for":"all audiences",//'for'保留字,因此必须用引号
        author:{//属性的值是一个对象
            firstname:"David",
            surname:"Flanagan"
        }
    };

    二、关键字new

    new运算符创建并初始化一个新对象,关键字new后跟随一个函数调用,这里的函数称做构造函数(constructor),构造函数用来初始化一个新创建的对象。javascript语言核心中的原始类型都包含内置构造函数。

    var o=new Object();//创建一个空对象,和{}一样
    var a=new Array();//创建一个空数组,和[]一样
    var d=new Date();//创建一个表示当前时间的Date对象
    var r=new RegExp("js");//创建一个可以进行模式匹配的RegExp对象

    当然,也可以用自定义构造函数来初始化新对象。

    三、Object.create

    ECMAScript 5定义了一个名为Object.create()方法,它创建一个具有指定的内部原型且包含指定的属性(如果有)的新对象,其中第一个参数是这个对象的原型;第二个为可选参数。Object.create()在IE9-中不受支持。

    Object.create()是一个静态函数,而不是提供给某个对象调用的方法。使用它的方法,只须传入所需的原型对象即可。可以通过任意原型创建新对象,也就是说可以使任意对象可继承。

    var o1=Object.create({x:1,y:2});//o1继承了属性x和y
    var o2=Object.create(null);//o2不继承任何属性和方法
    var o3=Object.create(Object.prototype);//o3和{}和new Object()一样

    下面的示例创建使用 null 原型的对象并添加两个可枚举的属性。

    var newObj = Object.create(null, {
                size: {
                    value: "large",
                    enumerable: true
                },
                shape: {
                    value: "round",
                    enumerable: true
                }
            });
    console.log(newObj.size);//large
    console.log(newObj.round);//round
    console.log(Object.getPrototypeOf(newObj));//null

    下面的示例创建了一个具有与 Object 对象相同的内部原型的对象。  Object.getPrototypeOf 函数可获取原始对象的原型。 若要获取对象的属性描述符,可以使用Object.getOwnPropertyDescriptor函数。

    var firstLine = { x: undefined, y: undefined };
    var secondLine = Object.create(Object.prototype, {
            x: {
                    value: undefined, 
                    writable: true, 
                    configurable: true, 
                    enumerable: true
                },
                y: {
                    value: undefined, 
                    writable: true, 
                    configurable: true, 
                    enumerable: true
                }
    });
    
    document.write("first line prototype = " + Object.getPrototypeOf(firstLine));
    document.write("<br/>");
    document.write("second line prototype = " + Object.getPrototypeOf(secondLine));
    
    // Output:
    // first line prototype = [object Object]
    // second line prototype = [object Object]
  • 相关阅读:
    Date Picker和UITool Bar控件简单介绍
    iOS开发UI篇—程序启动原理和UIApplication
    JS 随机生成随机数 数组
    你必须知道的28个HTML5特征、窍门和技术
    Javascript图片预加载详解
    弹性盒模型
    利用JSON.parse() 与 JSON.stringify() 实现深拷贝
    有关android及ios手机 中 input 调出数字键盘
    移动端 去除鼠标点击时的外轮廓
    H5 项目常见问题汇总及解决方案
  • 原文地址:https://www.cnblogs.com/aaron-shu/p/4187041.html
Copyright © 2011-2022 走看看