zoukankan      html  css  js  c++  java
  • 《Javascript高级程序设计》读书笔记(二)

    三、对象基础

    1、 ECMAScript的对象(object)像一个集合,可以随时添加新的属性或方法。

    2、 对象由特性(attribute)构成,特性可以是原始值,也可以是引用值,如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作属性(property)。

    3、 ECMAScript无用存储单元收集程序,意味着不必专门销毁对象来释放内存。把对象的所有引用都设置为null,可以强制性地废除对象。如果一个对象有两个或更多引用,则要正确废除该对象必须将其所有引用都 设置为null

    4、 “独立于宿主环境的ECMAScript实现提供的对象”称为本地对象native object)。ECMA-262定义的类包括:

    Object               Function           Array                 String

    Boolean             Number            Date                  RegExp

    Error                 EvalError          RangeError         ReferenceError

    SyntaxError       TypeError         URIError

    5、 Array类:

    创建Array类对象:

    var aValues = new Array()

    创建指定大小的Array对象:

    var aValues = new Array(20);

    创建不指定大小的Array对象:

    var aColors = new Array()

    aColors[0] = “red”;

    aColors[1] = “green”;

    aColors[2] = “blue”;

    创建并初始化Array对象

    var aClors = new Array(“red”, “green”, “blue”);

    数组可以根据需要增大或减小。数组增大时没有赋值的位置都会填上null,如:

    var aColors = new Array(“red”, “green”, “blue”);

    Alert(aColors.length);           // ouputs “3”

    aColors[25] = “purple”;

    alert(aColors.length);           // outputs “26”

    可以用字面量表示定义Array对象,即使用方括号“[”和“]”,用逗号分隔值。

    var aColors = [“red”, “green”, “blue”];

    Array类的toString()方法和valueOf方法,返回特殊的字符串。该字符串是通过对每项调用toString()方法转为字符串后,用逗号“,”把它们连接在一起构成的。

    join()方法也是用来把Arrray各项连接成字符串的。它只有一个参数,可以指定分隔符。如:

    alert(aColors.join(“][“));          // outputs   “red][green][blue][“

    字符串通过split()方法能转换为数组。当split()的参数为空字符串时,返回的数组中的每个项是字符串的字符。如:

    var sColors = “green”

    var aColors = sColors.split(“”);

    alert(aColors.toString());                   // ouputs “g,r,e,e,n”

    Array常用方法:

    Ø concat():将参数中的项附加到数组末尾。如:
    var aColors2 = aColors.concat(“yellow”, “purple”);

    Ø slice():返回指定位置的数组项。如:
    var aColors = [“red”, “green”, “blue”, “yellow”, “purple”];
    var aColros2 = arr.slice(1);
    var aColors3 = arr.slice(1, 4);
    alert(aColors2.toString());                      // outputs “green,blue,yellow,purple”
    alert(aColors3.toString());                     // outputs “green,blue,yellow”

    Ø Array对象提供了两个方法push()pop()push()方法用于在Array结尾添加一个或多个项,pop()方法用于删除最后一个数组项(length-1),并把该项作为函数的返回值。利用push()pop()方法可把Array对象模拟为一个栈(stack)

    Ø shift():删除数组中的第一个项,并返回该项作为函数返回值。利用shift()push()方法可把Array对象模拟为一个队列(queue)

    Ø unshift():把一个项放在数组的第一个位置,然后把余下的项向下移动一个位置。

    Ø reverse():颠倒数组。

    Ø sort():按升序排序数组项。根据字符代码(ASCII)大小排序。

    Ø splice():最复杂的方法,功能是把数据项插入数组的中部。该方法用于插入这些项的方式的变体大有用途:
    删除——当只声明两个参数时,就可以删除数组的任意多个项。如arr.splice(0, 2)将删除数组arr中的前两项。
    替换——声明三个参数时,可以把指定的数据项替换掉。这三个参数的意义是起始位置,删除的数组项的个数,要插入的项。如arr.splice(2, 2, “red”, “green”)将把位置2处的两项删除,并把”red””green”插入到该位置,达到替换的目的。

    6.         内置对象是指独立于宿主环境,由ECMAScript在程序开始时就实例化的对象。ECMA-262只定义了两个内置对象,即GlobalMath

    7.         Global对象是ECMAScript最特别的对象,因为根本看不到它的存在。之前章节介绍的函数isNaN()isFinite()等都是Global对象的方法。而且Grobal对象的方法不止这些。

    encodeURI()encodeURIComponent()——encodeURI用于对完整的URL进行编码,而encodeURIComponent用于处理URI的一个片断。这两个方法可代替BOMescape()方法。

    decodeURI()decodeURIComponent()——用于对编码的URI进行解码。这两个方法可代替BOMunescape()方法。

    eval()——该方法就像整个ECMAScript的解释程序,接受一个参数,参数是即要执行的ECMAScript字符串。例如:
    eval(“alert(‘hi’)”);
    这行代码的功能行等价于下面的代码:
    alert(“hi”);
    当解释程序发现eval()调用时,它将把参数解释为真正的ECMAScript语句,然后把它插入该函数所在的位置。这意味着eval()调用内部引用的变量可在参数以外定义:
    var msg = “hello world”;
    eval(“alert(msg)”);          // outputs “hello world”

    8.         Math对象包括许多专门用于执行简单的及复杂的数学计算的方法。

    ceil()——向上舍入函数

    floor()——向下舍入函数

    round()——标准的舍入函数,即四舍五入

    random()——返回一个01之间的随机数,不包括01。可用下面的形式调用random()方法,在某个范围内选择随机数:
    number = Math.floor(Math.random() * total_number_of_choices + first_possible_value)

    9.         所有非本地对象都是宿主对象(host object),即由ECMAScript实现的宿主环境提供的对象。所有BOMDOM对象都是宿主对象。

    10.     关键字this总是指向调用该方法的对象,例如:
    var oCar = new Object();
    oCar.color = “red”;
    oCar.showColor = function(){
            alert(this.color);              // outputs “red”
    };
    使用this,可在任意多个地方重用同一个函数。例如:
    function showColor(){
            alert(this.color);
    }

    var oCar1 = new Object;
    oCar1.color = “red”;
    oCar1.showColor = showColor;

    var oCar2 = new Object;
    oCar2.color = “blue”;
    oCar2.showColor = showColor;

    oCar1.showColor();                   // outputs “red”
    oCar2.showColor();                  // outputs “blue”

     

    11.     定义类或对象。

    工厂方式

    构造函数方式,像工厂方式一样,构造函数方式也会重复生成函数,为每个对象都创建独立的函数版本。不过,与工厂方式相似,也可以用外部函数重写构造函数。

    原型方式,利用对象的prototype属性,能使多个对象共享相同的函数,不好的是构造函数不能有参数,当属性指向的是一个对象时,多个实例也会共享该对象

    混合的构造函数/原型方式,结合了两种方式的优点,这是目前使用最广泛的类定义方式。例如:

      function Car(sColor, iDoors, iMpg){           // 构造函数方式定义属性
        this.color = sColor;
        this.doors = iDoors;
        this.mpg = iMpg;
        this.drivers = new Array(“Mike”, “Sue”);
    }

    Car.prototype.showColor = function(){               // 原型方式定义函数,使多个实例能共享相同的函数
        alert(this.color);
    };

    var oCar1 = new Car(“red”, 4, 23);
    var oCar2 = new Car(“blue”, 3, 25);

    oCar1.drivers.push(“Matt”);

    alert(oCar1.drivers);                   // outputs “Mike,Sue,Matt”
    alert(oCar2.drivers);                 // outputs “Mike, Sue”

    动态原型方法,动态原型方法的优点是可以把属性定义和函数定义把封装在一起,不用分开定义。

    混合工厂方式,与经典的工厂方式不同,这种方式可以使用new运算符,使它更像真正的构造函数。不过同经典的工厂方式存在相同的问题,不建议使用。

  • 相关阅读:
    jQuery中Ajax事件beforesend及各参数含义 转
    如何组织好js代码 转
    C# 几种HtmlEncode的区别
    [转]建议Font-Size使用em单位控制大小
    JavaScript charAt() 方法
    Js中 关于top、clientTop、scrollTop、offsetTop的用法
    jquery mobile 的4个初始化事件
    JS操作JSON总结
    .html(),.text()和.val()的使用
    netstat 显示当前网络连接的统计信息
  • 原文地址:https://www.cnblogs.com/vento/p/1310436.html
Copyright © 2011-2022 走看看