1

我正在研究一个 JavaScript 文件,并在其中看到一些方法包含在一个 jQuery 函数中。谁能帮我如何调用以下方法?我可以知道有什么优势或为什么将方法包装在函数中吗?下面是我的示例 JavaScript 代码。

jQuery/JavaScript

$(document).ready(function () {
    //How to invoke "testMethod" method?
    $(function () {
        function testMethod() {
            alert("this is a test method");
        }
    });
});
4

4 回答 4

3

正如您所声明的,它testMethod()是一个本地函数,并且仅在声明它的函数范围内可用。如果您希望它在该范围之外可调用,则需要以不同的方式定义它,以便它在更广泛的范围内可用。

一种方法是使其成为全局函数:

$(document).ready(function () {
    //How to invoke "testMethod" method?
    $(function () {
        window.testMethod = function() {
            alert("this is a test method");
        }
    });
});

testMethod();   // available globally now

它也可以附加到全局命名空间,或者可以在更高的范围内定义它也可以解决您的问题。如果没有具体说明您的情况,我们无法建议哪一个最好,但您需要做的主要事情是更改函数的声明方式,以便它在您想要调用它的范围内可用。

PS 为什么你有一个文档就绪函数嵌套在另一个函数中?这没有提供额外的功能并增加了不必要的复杂性。此外,如果您希望它在全球范围内可用,实际上没有理由testMethod()在您的文档就绪处理程序中定义它。

于 2013-04-08T05:55:25.420 回答
1

在其他任何事情之前:

$(document).ready(function(){...});
//is the same as
$(function(){...}}

至于您的问题,以下是可能的方法:

  • 如果该函数是每个人都使用的某个实用函数,那么在某个命名空间中让所有人都可以使用它,例如在这个名为Utility

    //Utility module
    (function(ns){
      //declaring someFunction in the Utility namespace
      //it's available outside the ready handler, but lives in a namespace
      ns.someFunction = function(){...}
    }(this.Utility = this.Utility || {}));
    
    $(function(){
      //here in the ready handler, we use it
      Utility.someFunction();
    });
    
  • 如果它们都存在于ready处理程序中,并希望处理程序中的所有代码都使用它,请将其声明在处理程序的最外层,以便所有嵌套范围都能看到它。

    $(function(){
      //declare it in the outermost in the ready handler
      function someFunction(){...}
    
      //so we can use it even in the deepest nesting
      function nestedSomeFunction(){
        someFunction();
      }
    
      someElement.on('click',function(){
        $.get('example.com',function(){
          someFunction();
        });
      });
    
      nestedSomeFunction();
      someFunction();
    
    });
    
于 2013-04-08T06:06:40.213 回答
0

您的通话需要在$(function.

这都是关于范围的,您需要将 testMethod 从$(function.

您能否进一步解释您的要求,以便我们可以提供更好的帮助?

于 2013-04-08T05:55:52.983 回答
0

进入就绪事件:

$(document).ready(function () {
    //How to invoke "testMethod" method?
    var testMethod = function () {
        alert("this is a test method");
    }

    // V0.1
    testMethod();

    // V0.2
    $('#some_id').click(testMethod);
});

在其他部分:

myObj = {testMethod: null};
$(document).ready(function () {
    //How to invoke "testMethod" method?
    myObj.testMethod = function () {
        alert("this is a test method");
    }
});

// Something else
if( myObj.testMethod ) myObj.testMethod();
于 2013-04-08T06:06:37.567 回答