Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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 为什么$(this)和console.log显示为相同的内容?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 为什么$(this)和console.log显示为相同的内容?

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 = [];

我了解到,在jQuery回调$中,它将对DOM对象或对象数组的引用传递给jQuery,并构造一个jQuery对象,我还了解到这是对jQuery选择器所选的DOM对象或对象数组的引用,但我不明白为什么这两个不同的对象在Chrome inspector中具有相同的jQuery方法:

// 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);