Javascript jQuery库设计:jQuery如何像数组一样工作,但它是一个对象?
考虑到可以使用类似于数组的括号语法访问jQuery对象的成员:Javascript jQuery库设计:jQuery如何像数组一样工作,但它是一个对象?,javascript,jquery,Javascript,Jquery,考虑到可以使用类似于数组的括号语法访问jQuery对象的成员:$myjQueryObject[0],jQuery似乎扩展了内置的数组对象。然而,我似乎在jquery.js文件中找不到他们在哪里这样做 通过扩展数组“类”,我成功地完成了类似的事情,只是好奇jQuery是如何做到的 任何对象都可以通过[]符号访问其属性 var obj = {}; obj["foo"] = "bar"; obj[1]= "baz"; 在JavaScript中,数组只是一个专用对象,因此其[]语法与任何其他对象相
$myjQueryObject[0]
,jQuery似乎扩展了内置的数组
对象。然而,我似乎在jquery.js
文件中找不到他们在哪里这样做
通过扩展
数组
“类”,我成功地完成了类似的事情,只是好奇jQuery是如何做到的 任何对象都可以通过[]
符号访问其属性
var obj = {};
obj["foo"] = "bar";
obj[1]= "baz";
在JavaScript中,数组只是一个专用对象,因此其[]
语法与任何其他对象相同
此外,Array.prototype
方法在规范上是通用的。它们可以应用于任何“类似数组”的对象,即任何具有数值.length
和数值索引的对象
var obj = {"1": "bar", "0": "foo", "2": "baz"};
var arr = Array.prototype.slice.call(obj, 1);
console.log(arr); // ["bar", "baz"]
JQuery也不能做到这一点——它只是伪造了“length”属性。可能的重复:在有人回答括号语法之前,让我先读一下?它只是创建数字索引吗?括号语法只是语言的一部分,是的,它使用数字属性名。(所有属性名,即使在数组中,从技术上讲都是字符串。)@MikeLewis最主要的困难是正确设置“length”属性以匹配数字属性名。jQuery会自动将所有成员映射到数字索引?@MikeLewis:Correct。此外,本机数组方法可用于任何具有数值
.length
属性和数值索引的对象。此处的结果不正确。在我的控制台中,它返回[]
您需要添加length
道具才能工作(chrome)