我可以在JavaScript窗口全局对象中定义的某个对象中找到JQuery函数吗?

我可以在JavaScript窗口全局对象中定义的某个对象中找到JQuery函数吗?,javascript,jquery,javascript-objects,javascript-framework,Javascript,Jquery,Javascript Objects,Javascript Framework,我对JavaScript和JQuery还很陌生,我有以下疑问 我知道如果我打开FireBug控制台键入窗口,我会看到全局对象的内容,在运行到浏览器中的JavaScript应用程序中是当前浏览器选项卡(窗口) 好的,在这个全局对象中,我可以看到所有的全局变量和所有的全局函数(没有在另一个函数中定义的变量和函数) 因此,我有一个链接.js文件的页面 此文件将包含以下纯JavaScript函数: function myFunction() { .........................

我对JavaScript和JQuery还很陌生,我有以下疑问

我知道如果我打开FireBug控制台键入窗口,我会看到全局对象的内容,在运行到浏览器中的JavaScript应用程序中是当前浏览器选项卡(窗口)

好的,在这个全局对象中,我可以看到所有的全局变量和所有的全局函数(没有在另一个函数中定义的变量和函数)

因此,我有一个链接.js文件的页面

此文件将包含以下纯JavaScript函数:

function myFunction() {
    .................................
    .................................
    .................................
}
$(document).ready(function() {

    $("#myButton").click(function() {
        ............................................
        ............................................
        DO SOMETHING WHEN THE BUTTON HAVING id="myButton" IS CLICKED
        ............................................
        ............................................
     });
});
console.log(result_based_on_callback(1, 2, function(a, b) { return a + b; }));
function do_add(a, b) {
    return a + b;
}

console.log(result_based_on_callback(1, 2, do_add));
因此,我将把myFunction函数视为窗口的一个字段全局对象,因为该函数是global(未在另一个函数中定义)。我完全清楚这一点

因此,在我的页面内链接的.js文件中,我还有如下内容:

function myFunction() {
    .................................
    .................................
    .................................
}
$(document).ready(function() {

    $("#myButton").click(function() {
        ............................................
        ............................................
        DO SOMETHING WHEN THE BUTTON HAVING id="myButton" IS CLICKED
        ............................................
        ............................................
     });
});
console.log(result_based_on_callback(1, 2, function(a, b) { return a + b; }));
function do_add(a, b) {
    return a + b;
}

console.log(result_based_on_callback(1, 2, do_add));
所以,这是一个JQuery代码,它应该以这种方式工作(如果我做了错误的断言,请纠正我)

有一个$就是JQuery对象(或者它是什么?)

在这个JQuery对象上,我调用ready()函数,该函数在DOM完全呈现时执行其内部回调函数

因此,内部回调函数包含:

$("#myButton").click(function() {...DO SOMETHING...});
选择一个具有id=“myButton”的按钮,并向其添加单击事件列表器,该列表器本身定义了一个内部回调函数,该函数在单击按钮时执行

这是真的吗

好的……所以我认为所有这些东西都不直接在全局对象中,因为它没有直接定义到我的.js文件中,而是必须在一些专门用于JQuery的内存空间中

因此,在FireBug控制台的窗口中查看对象时,我发现了两个对象:

  • $:我认为这就是JQuery对象……因此我认为我以前的自定义JQuery函数必须在这里,但我找不到它

  • JQuery:这是窗口中的另一个对象全局对象

因此,我的疑问是:当在ready()函数中声明类似

$("#myButton").click(function() {...DO SOMETHING...});

我可以在窗口全局对象中定义的某个对象中找到函数()的定义{…做点什么…}?我能找到它吗?还是我遗漏了什么?

jQuery将其事件相关数据存储在应用于每个元素的数据对象
events
中。您可以使用
$。\u data()
获取此信息:

$。\u数据($('myButton')[0],'events')

$。\u数据(document.getElementById('myButton'),'events')

要获取应用于按钮单击侦听器的回调函数,只需抓取处理程序即可。例如:

$("#myButton").click(function () { console.log('clicked'); });

var eventsInfo = $._data(document.getElementById('myButton'), 'events');

console.log(eventsInfo.click[0].handler);
上面应该打印出“function(){console.log('clicked');}”

请记住,
$。\u data()
没有可用的公共文档,尽管知道这一点很简单

以下内容提到了jQuery v1.8发布时的
$。\u data()
,但确实对此发出了警告:

请注意,这不是受支持的公共接口;实际数据结构可能会因版本不同而发生不兼容的变化

那是在2012年。到目前为止,它似乎在最新的1.x和2.x版本中运行良好,因此我认为这种情况不会很快消失。

这是一个匿名函数,基本上是一段独特的代码,您不想为其编写命名函数

它是一个一次性用例,或者更确切地说,它用于绑定定制的点击事件,而不会在全局对象中乱丢变量

匿名函数的作用与您的要求完全相反,因为您在全局对象中找不到它(匿名函数

.click
是在
$.fn
中定义的函数,由于
$
窗口
对象的一部分,因此您可以遍历该对象以找到单击,例如
窗口。$.fn.click
将是指向
$(…)源的路径。单击(func…)
但匿名函数是一种设置后被遗忘(或多或少)的函数

毕竟,你没有给它起一个名字,所以它无法指出这到底是什么

如果使用命名函数作为另一个函数的参数,则称之为

匿名函数基本上是一个无名的回调函数,回调函数是一个普通函数,可以作为一个可调用参数传递给其他函数-然后这个普通函数将在内部使用或执行提供的回调,这就是jQuery在绑定
单击时所做的

这里的好处是,你没有遗漏任何东西,事实上,你问的问题是正确的,因为如果你刚刚开始,这看起来像魔术,但一旦你掌握了窍门,它很容易理解和使用(和误用,所以要小心!)

如果你想知道这个构造是如何工作的,你可以构建你自己的函数来接受回调/匿名函数,例如

function result_based_on_callback(a, b, fn) {
    fn.call(null, a, b);
}
上面的函数包含两个参数和一个函数,它将调用该函数并向其提供两个参数(
null
是另一类问题的上下文:)

如果我们使用上述构造进行计算,我们可以这样做:

function myFunction() {
    .................................
    .................................
    .................................
}
$(document).ready(function() {

    $("#myButton").click(function() {
        ............................................
        ............................................
        DO SOMETHING WHEN THE BUTTON HAVING id="myButton" IS CLICKED
        ............................................
        ............................................
     });
});
console.log(result_based_on_callback(1, 2, function(a, b) { return a + b; }));
function do_add(a, b) {
    return a + b;
}

console.log(result_based_on_callback(1, 2, do_add));
这将返回
3
,您也可以使用一个普通函数执行此操作,否则该函数将接受两个数字并将它们相加-除了只传递函数名而不是函数体之外,它的工作原理是相同的