zoukankan      html  css  js  c++  java
  • JavaScript中的类数组对象

        在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置。

    一般来说,如果我们有一个对象obj和一个数组a:

    obj["attr1"];    //取obj对象的attr1属性

               a[1];   //取数组a中的第二个元素

        但是,有些时候,也会将一个对象“伪装”成一个数组来用,我们把这种对象称为“类数组对象”,再此我们可以給它下一个定义,请看如下的代码:

    var a= {};

    var i = 0;

    for(i=0; i<10 ; i++){

      a[i] = i*i;

    }

    a.length = i;

    var total = 0;

    for(var j=0; j< a.length; j++){

      total += a[j];

    }

    上述代码中的a就是一个类数组对象,因此,我们可以在这里给类数组对象下一个定义:任何一个具有length属性以及对应的非负整数属性的对象作为一种数组。

    但是,类数组对象毕竟本质上是一个Object,而不是真正的Array,那么二者的区别在哪里呢?

    1、一个是对象,一个是数组

    2、数组的length属性,当新的元素添加到列表中的时候,其值会自动更新。类数组对象的不会。

    3、设置数组的length属性可以扩展或截断数组。

    4、数组也是Array的实例可以调用Array的方法,比如push,pop等等。

    一些个类数组对象的实例:

    1、function内部的arguments对象就是一个类数组对象,它用arguments[2]来代表传入的第3个参数。

    2、DOM方法document.getElementsByTagName(),返回的也是一个类数组对象

    3、jQuery中的应用: 我们知道可以通过 $('#id')[0]来从jQuery对象获取原生的dom对象,但是jQuery中是如何实现的呢,$('#id')获取的jQuery对象到底是一个对象还是一个数组呢,答案是:一个类数组对象

         我们看一下jQuery的源代码:

    jQuery = window.jQuery = window.$ = function( selector, context ) {
            return new jQuery.fn.init( selector, context );
        },
    jQuery.fn = jQuery.prototype = {
        init: function( selector, context ) {
            selector = selector || document;

            // Handle $(DOMElement)
            if ( selector.nodeType ) {
              this[0] = selector;
              this.length = 1;
              this.context = selector;
              return this;
             }

        ...

    红色字部分,构造了一个类数组对象,this指向的是通过jQuery('#id')构造的jQuery对象,而selector就是原生的dom对象,在此,把dom对象存在jQuery对象的0属性里了(属性名就叫0)。

  • 相关阅读:
    【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)
    【BZOJ1975】【SDOI2010】魔法猪学院(搜索,A*,贪心)
    【BZOJ1008】【HNOI2008】越狱(组合数学)
    【HNOI2004】敲砖块(动态规划)
    【Luogu1919】 A*B Problem升级版(FFT)
    【Luogu3803】多项式乘法FFT(FFT)
    【Luogu3919】可持久化数组(主席树)
    【NOIP2016】换教室(动态规划)
    【NOIP2015】斗地主(搜索,贪心)
    【NOIP2015】子串(动态规划)
  • 原文地址:https://www.cnblogs.com/lyhero11/p/5244834.html
Copyright © 2011-2022 走看看