Javascript jQuery解构| ES5术语中的jQuery对象?
这将返回一个jQuery对象。什么是jQuery对象。它是对象、数组还是两者的组合Javascript jQuery解构| ES5术语中的jQuery对象?,javascript,jquery,Javascript,Jquery,这将返回一个jQuery对象。什么是jQuery对象。它是对象、数组还是两者的组合 $("#id") 我正在中查找,但找不到。$()返回jQuery类的实例(new jQuery())。 因此,它继承了jQuery.prototype(别名为jQuery.fn)中的所有标准jQuery方法以及所有插件 此外,jQuery()构造函数通过添加length属性以及集合中每个元素的索引属性,将每个实例转换为类似数组的对象。jQuery对象是jQuery库的对象,基本上所有jQuery方法和属性都可以
$("#id")
我正在中查找,但找不到。$()
返回jQuery类的实例(new jQuery()
)。因此,它继承了
jQuery.prototype
(别名为jQuery.fn
)中的所有标准jQuery方法以及所有插件
此外,
jQuery()
构造函数通过添加length
属性以及集合中每个元素的索引属性,将每个实例转换为类似数组的对象。jQuery对象是jQuery库的对象,基本上所有jQuery方法和属性都可以附加到该jQuery对象;不要将其用作普通javascript对象。返回的对象(请参见其含义)是jquery的内部构造函数函数的一个实例(jquery.fn.init
——有关jquery实例化模式的详细信息,请参见),继承自$.fn
原型对象
当然,它是Object
的一个实例,几乎与JavaScript中的每个对象一样
而且,由于每个jQuery元素都代表[DOM]元素的集合,因此它看起来像一个带有数字索引属性的数组
——尽管length
属性不是自动更新的,但您可以对其应用大多数数组方法。它不是一个真正的数组实例(,)。首先,它不是什么。
jQuery对象不是数组
在JavaScript中,有内置的本机构造函数。其中之一是数组
。但最终,数组
构造函数会创建对象。jQuery对象不是从数组构造函数生成的
那么对象与数组有何不同呢?
由于Object
和Array
是内置的本机构造函数,因此从构造函数创建的对象具有内部[[Class]]]
属性。你可以这样看它的价值
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call([]); // [object Array]
{} ---> Object.prototype ---> null
[] ---> Array.prototype ---> Object.prototype ---> null
所以你可以看到这些物体有一个区别
还有什么区别?
两个对象的原型链是不同的。对于一个普通对象,它可以像这样可视化
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call([]); // [object Array]
{} ---> Object.prototype ---> null
[] ---> Array.prototype ---> Object.prototype ---> null
而对于数组,如下所示
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call([]); // [object Array]
{} ---> Object.prototype ---> null
[] ---> Array.prototype ---> Object.prototype ---> null
因此,您可以看到,它们的继承性也使它们与众不同
那么jQuery对象呢?
jQuery对象更像是普通对象,而不是数组。但是JavaScript允许您定义自定义(而不是内置)构造函数
toString
值将与对象[Object Object]
相同,但原型链将不同
function Foo() {
}
new Foo() ---> Foo.prototype ---> Object.prototype ---> null
因此jQuery的原型链与此类似,但是使用jQuery
构造函数而不是Foo
那么这一切意味着什么呢?
JavaScript中的所有对象都类似于继承自Object.prototype
*,但您可以拥有具有扩展原型链的不同对象,也可以拥有具有内部[[Class]]
属性的本机对象,这些属性赋予它们区别
因此,要回答“jQuery对象是什么类型的对象”的问题,答案是它是一个继承自对象的对象。prototype
与每个对象一样,也继承自其自定义构造函数的prototype
*请注意,在ES5中,还可以有一个没有原型链的对象。其链立即终止为null
但是jQuery对象将DOM元素存储在数字索引中,并且具有.length
属性。这不是一个数组吗?
不,这只是使它成为一个具有数字属性的对象,以及一个名为length
的属性
var myObj = {};
myObj[0] = "foo";
myObj[1] = "bar";
数组的属性并不特殊。它们与对象的属性相同
var myArr = [];
myArr[0] = "foo";
myArr[1] = "bar";
这两个代码示例所做的事情完全相同
他们在做完全相同的事情?真的吗?
差不多了。数组对象和对象对象之间的属性本身没有区别,但数组有一些特殊的行为
例如,如果我在高于当前.length
帐户的索引处添加属性,则.length
将自动调整
myArr.length; // 2
myArr[9] = "baz";
myArr.length; // 10
在数组中,.length
本身具有一些“神奇”的功能,例如可以通过将.length
设置为较低的值来截断数组
myArr.length = 1;
myArr[1]; // undefined
因此,尽管jQuery对象具有数值属性和.length
属性,但它的行为与本机数组的行为不同。这是由选择器表示的元素。在Firefox中,使用console.debug($(“#id”)代码>。请参阅此SO链接。可能会有帮助@HiroProtation:类似数组的对象是一个常规对象,其属性使其看起来像数组,正如我在回答中所解释的那样。@dotsamuelswan:它不是数组。@HiroProtation:所说的“类”,是指原型函数。你有更好的术语吗?“它是一个对象,一个数组,还是两者的组合?”-一个如上所述的对象。很有趣为什么会有向下投票。依我看,答案简单而完整。@SLaks:请注意jQuery.prototype
也只是一个别名:-)一个jQuery对象!-)JavaScript是松散类型的。因此,对象的“种类”是非物质的。任何提供您目前所需的实用程序的对象都是“正确的类型”。@hiroprogator它“看起来像一个数组”,但它不是数组。从数组继承是危险的,因此它从对象继承并实现类似数组的特性(例如,.length
)——换句话说,它像数组一样嘎嘎作响。;-)@男主角:只有厕所