Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery库设计:jQuery如何像数组一样工作,但它是一个对象?_Javascript_Jquery - Fatal编程技术网

Javascript 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中,数组只是一个专用对象,因此其[]语法与任何其他对象相

考虑到可以使用类似于数组的括号语法访问jQuery对象的成员:
$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)