JS Jquery命名空间调用函数

时间:2012-05-04 02:36:00

标签: javascript jquery

好可怕的头衔,但我想不出另一种描述。

我有以下代码:

jQuery( document ).ready( function( $ ) 
{
    $.myNamespace = {
          init: function()
          {

             $('.button').click(function() {
                  this.anotherFunction();
             });
          },
          anotherFunction: function()
          {
               alert('insidefunction');
          }
    }
    $.myNamespace.init();
});

正如你所看到的那样,我试图从init内部调用anotherFunction并且有两种方法我尝试但是没有用。那我怎么能调用那个函数或者我的概念错了呢?

2 个答案:

答案 0 :(得分:1)

jQuery( document ).ready( function( $ )
{
    $.myNamespace = {
          init: function()
          {
             var a=this;
             $('.button').click(function() {
                  a.anotherFunction();
             });
          },
          anotherFunction: function()
          {
               alert('insidefunction');
          }
    }
    $.myNamespace.init();

});

http://jsfiddle.net/ZpAtm/2/

答案 1 :(得分:0)

在click处理程序中完全调用它会改变一些事情,因为任何jQuery事件处理程序中的this都设置为导致该事件的元素。

相反,请尝试使用以下模式:

jQuery(document).ready(function($) {
    $.myNamespace = (function() {
        function init() {
            $('.button').click(function() {
                anotherFunction();
            });
        }

        function anotherFunction() {
            alert('insidefunction');
        }

        // return an object with all the functions you want 
        // available publically as properties. Don't include
        // any "private" functions.
        return {
            init: init,
            anotherFunction: anotherFunction
        };
    })();
    $.myNamespace.init();
});​