开发者社区> 问答> 正文

jQuery对象用console.log输出看到的很像数组是怎么实现的?

图片上传不了,老出错;就只能复制啦!

这个是我自己构造的对象,用console.log输出看到是这样;
foo.fn.foo.init {0: div, 1: div, 2: div, 3: div, 4: div, selector: "div", init: function, aouth: "jer", age: 24, add: "江西"…}

jquery对象用console.log输出像一个数组;
[div, div, div, div, div, prevObject: b.fn.b.init[1], context: document, selector: "div", jquery: "1.9.1", constructor: function…]

想知道它是怎么实现的,下面是我写的源码;

(function(){
    function foo(selector){
        return new foo.prototype.init(selector);
    };
    foo.fn = foo.prototype= {
        init : function(selector){
            var elems = document.getElementsByTagName(selector),
            len = elems.length,
            i = 0;
            for(;i < len;i++){
                this[i] = elems[i];
            };

            this.selector = selector
                return this;
        },
        aouth:'jer',
        age: 24,
        add :'江西'
    };
    foo.prototype.init.prototype = foo.prototype;
    foo.fn.sayName = function(){
        return this;
    };
    foo.fn.sayAdd = function(){
        return this;
    };
    window.foo = foo;
})();
//console.log(foo);
var selects = foo('div');
console.log(selects);

展开
收起
云栖技术 2016-05-25 09:22:54 3164 0
1 条回答
写回答
取消 提交回答
  • 社区爱好者,专为云栖社区服务!

    这个其实不难,典型的 Ducking Type 应用。一个 Javascript 对象,只要定义了 length 属性和 splice 方法,它看起来就像一个数组。例如:

    全选复制放进笔记

    var x = {
      '0': 'foo',
      '1': 'bar',
      length: 2,
      splice: function () {}
    };
    
    console.log(x);  // ["foo", "bar", splice: function]
    2019-07-17 19:13:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载