快速创建类数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速创建类数组相关的知识,希望对你有一定的参考价值。

创建新对象:
function createLikeArray(){};
var obj = new createLikeArray(); //{}

这时候还只是空对象;如何把对象转换成类数组 ??

[1, 2, 3, 4] => [0=>1, 1=>2, 2=>3, 3=>4] => {‘0‘ : 1, ‘1‘ : 2, ‘2‘ : ‘3‘, ‘3‘ : ‘4‘};

上面列出了三步骤:

function createLikeArray( arr ){
    this.addKeys(arr);
};
createLikeArray.prototype.addKeys = function( array ){
    var _this = this;
    array.forEach(function(v, i){
           _this[i] = v;
    });
}

技术分享

这样的输出还是Object,不像数组;

 

接下来这样呢?

function createLikeArray( arr ){
    this.addKeys( arr );
}
var protos = createLikeArray.prototype = [];
protos.constructor = createLikeArray;
protos.addKeys = function( array ){
    var _this = this;
    array.forEach(function(v){
        _this.push(v);
    });
};

技术分享

 OK!达到我的要求,数据结构 看着像数组,又有自己的原型、还有数组的属性方法;

 

createLikeArray : 构造函数;

addKeys方法 实际是把数组 变成 Object对象;这是还不像数组;

再加上原型是一个空数组,又继承了数组的原型所有的方法;这才看起来像数组;

在后面可以继续给protos 添加属性 和 方法,扩展createLikeArray的原型;

 

在研究jQuery源码的时候,看到jQuery的实现方式:

查找dom,返回的数组形式;再遍历数组 转换为 {0:‘‘,1:‘‘,length:2,...};

最后在原型上添加 slice、splice方法,看着就是像数组

 

以上是关于快速创建类数组的主要内容,如果未能解决你的问题,请参考以下文章

如何快速创建由类实例填充的数组?

vs2003:快速片段工具

Xcode 快速开发 代码块

如何从片段内的列表视图打开链接网址?

Xcode 快速开发 代码块 快捷键

如何创建片段以重复变量编号中的代码行