如何调用这个jQuery函数中包含的JavaScript方法

时间:2013-04-08 05:53:22

标签: javascript jquery

我正在研究一个JavaScript文件,并在其中看到一些方法被包装在jQuery函数中。任何人都可以帮我如何调用以下方法吗?我可以知道该方法包含在函数中的优点或原因是什么?以下是我的JavaScript代码示例。

JQuery的/ JavaScript的

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

4 个答案:

答案 0 :(得分:3)

正如您所声明的那样,testMethod()是一个本地函数,只能在声明它的函数作用域内使用。如果您希望它在该范围之外可调用,则需要以不同方式对其进行定义,以便在更广泛的范围内可用。

这样做的一种方法是使其成为一个全局函数:

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

testMethod();   // available globally now

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

P.S。为什么有一个文档就绪函数嵌套在另一个中?这不会提供额外的功能并增加不必要的复杂性此外,如果您希望全局可用,则没有理由在文档就绪处理程序中定义testMethod()

答案 1 :(得分: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();
    
    });
    

答案 2 :(得分:0)

您的通话需要在$(function

之内

这完全取决于范围,您需要将testMethod从$(function中删除。

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

答案 3 :(得分: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();