gpt4 book ai didi

javascript - Javascript 中类似数组的对象

转载 作者:IT王子 更新时间:2023-10-29 03:19:10 25 4
gpt4 key购买 nike

我想知道 jQuery 如何构造它的类数组对象。我要解决的关键问题是它如何设法让控制台将其解释为数组并按此显示。我知道这与 length 属性有关,但玩了一下后我不太明白。

我知道这与下面示例中的对象之类的普通数组相比没有技术优势。但我认为它是用户在测试和调试时的重要语义元素。

像对象这样的普通数组。

function foo(){
// Array like objects have a length property and it's properties use integer
// based sequential key names, e.g. 0,1,2,3,4,5,6 just like an array.
this.length = 1;
this[0] = 'hello'
}
// Just to make sure add the length property to the prototype to match the Array
// prototype
foo.prototype.length = 0;

// Give the Array like object an Array method to test that it works
foo.prototype.push = Array.prototype.push

// Create an Array like object
var bar = new foo;

//test it
bar.push('world');

console.log(bar);
// outputs
{ 0: 'hello',
1: 'world',
length: 2,
__proto__: foo
}

jQuery 的输出位置

var jQArray = $('div')

console.log(jQArray);

// outputs
[<div></div>,<div></div>,<div></div>,<div></div>]

如果你跑

console.dir(jQArray)

// Outputs

{ 0: HTMLDivElement,
1: HTMLDivElement,
2: HTMLDivElement,
3: HTMLDivElement,
4: HTMLDivElement,
context: HTMLDocument,
length: 5,
__proto__: Object[0]
}

jQuery 对象的原型(prototype)特别有趣,因为它是 Object 而不是预期的 jQuery.fn.init,而且 [0] 表示一些东西,因为这就是你得到的东西。

console.dir([])
// outputs Array[0] as the object name or Array[x] x being the internal length of the
// Array

我不知道 jQuery 如何将其原型(prototype)设置为 Object[0],但我猜答案就在其中。有人有什么想法吗?

最佳答案

对象必须有lengthsplice

> var x = {length:2, '0':'foo', '1':'bar', splice:function(){}}
> console.log(x);
['foo', 'bar']

仅供引用,Object[0] 作为原型(prototype)的原因完全相同。浏览器将原型(prototype)本身视为一个数组,因为:

$.prototype.length == 0;
$.prototype.splice == [].splice;

关于javascript - Javascript 中类似数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com