Javascript 为什么$(this)和console.log显示为相同的内容?
我了解到,在jQuery回调$中,它将对DOM对象或对象数组的引用传递给jQuery,并构造一个jQuery对象,我还了解到这是对jQuery选择器所选的DOM对象或对象数组的引用,但我不明白为什么这两个不同的对象在Chrome inspector中具有相同的jQuery方法:Javascript 为什么$(this)和console.log显示为相同的内容?,javascript,jquery,dom,Javascript,Jquery,Dom,我了解到,在jQuery回调$中,它将对DOM对象或对象数组的引用传递给jQuery,并构造一个jQuery对象,我还了解到这是对jQuery选择器所选的DOM对象或对象数组的引用,但我不明白为什么这两个不同的对象在Chrome inspector中具有相同的jQuery方法: // Print the object methods (found here on stackoverflow) function getMethods(obj) { var result = [];
// Print the object methods (found here on stackoverflow)
function getMethods(obj) {
var result = [];
for (var id in obj) {
try {
if (typeof(obj[id]) == "function") {
result.push(id + ": " + obj[id].toString());
}
} catch (err) {
result.push(id + ": inaccessible");
}
}
return result;
}
...
// into a jquery callback
console.log(getMethods($(this))); // This returns an array of jQuery methods
console.log(getMethods(this)); // This does the same - why??
编辑:这是我在撰写本文时在Google Chrome最新版本中看到的:
现在这两种方法并不相同: 请检查它们的长度
console.log(getMethods($(this)).length); // This returns an array of jQuery methods
返回给你174
当
返回您109
更新
当您在$.fn.addRootNode内调用这两个函数时,这里指的是jQuery对象
正如我们所知,当您传递$jQueryRappedObject时,它将返回该对象,就像它已经是jquery对象一样
这就是为什么您在这两个节点中看到相同的值。您在$.fn.addRootNode.$内调用这两行。fn是对jQuery.prototype的引用。所以,您所做的是向jQuery对象添加一个名为addRootNode的函数。您基本上创建了一个jQuery插件 在该函数中,这是一个jQuery对象,因为您调用的函数是jQuery原型的一部分。您正在某处执行$'yourElement'.addRootNode,因此这是调用的jQuery对象addRootNode
执行$this没有任何作用,因为它已经是jQuery对象。jQuery知道这一点,只返回同一个对象。@Albert你能给出一个工作示例,以及在这两种情况下看到的方法的名称吗?当然,请稍等片刻,我会编辑它。这些调用中不会出现任何问题,所以无意义的尝试。catch Block编辑了问题,并链接到chrome的检查器。顺便说一句,由于声誉问题,我不能发布图片。Chrome似乎使用了非常接近jQuery的东西。。。尝试在空白页面中打开控制台,如about:blank,然后查看控制台中$returns的内容。。。我不知道它到底是什么,只是它就在那里……这是真的,谢谢。顺便说一句,我还想知道为什么DOM引用或DOM引用数组中有jquery方法
console.log(getMethods(this).length);