微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在jQuery中定义Javascript中的函数

我正在专有网站上工作,遇到了一些问题.我将jQuery与原型一起使用,并且已正确为其命名空间,因此在此问题中,假定您可以使用$或jQ作为对jQuery的命名空间引用.

所以我有很多函数,一些将jQuery和javascript混合在一起,一些简单的javascript,仅一些jQuery.现在,当前有一些函数在document.ready jQuery函数中定义,而有些则在其外部定义,如下所示:

jQ(document.ready(function($) {

  if ( ifConfig ) {
    //page check, function calls here
    fnc1();
    fnc2();
    fnc3();
    fnc4();
  }

  function fnc1() {
    //fnc code in here
  }
  function fnc2() {
    //fnc code in here
  }
});  //end document.ready

function fnc3() {
}
function fnc4() {
}

现在,所有这些都是伪代码,您可以假定函数有效并且其中包含有效代码.最近我在做一些调试工作,其中一个函数在文档中被声明和调用.ready说它是未定义的.我将其移出文档,准备就绪,一切再次正常.

我基本上是想了解函数如何被启动/更好地调用的顺序,所以我的问题是何时在文档中声明函数.准备好何时在外部声明它们?仅在该文档中调用它们时才声明内部吗?或者我应该总是只在该文档之外声明它们.

谢谢.

解决方法:

通常,您应声明&定义自己的名称空间,所有应用程序逻辑(包括函数/方法)都位于其中.这样,您就可以避免与网站上的其他脚本发生冲突,从而使代码更清晰,更易于维护.

var myapp = function(){
    var foobar1 = null,
        foobar2 = null,
        foobar3 = null;

    return {
        getFoobar1:  function(){
           return foobar1;
        },
        getFoobar2:  function(){
           return foobar2;
        },
        setFoobar1:  function(foo){
           foobar1 = foo;
        },
        clickhandler: function(e){
           alert('I am an event handler, and I am not anonymous');
        }
        // etc.
    };
};

$(document).ready(function(){
    var Application = myapp();

    Application.getFoobar2();

    $(document).bind('click', Application.clickhandler);
});

该模式(有人称其为“方法模式”)创建了一个封闭的函数/对象,该函数/对象还保证了命名空间内的私有成员变量,只能从外部通过getter函数进行访问.

这实际上只是一个非常基本的示例,您可以提出这个想法&模式扩展,非常好&一件好事(IMO).

关于该内容的一本好书,经常被命名和推荐,是道格拉斯·克罗克福德(Douglas Crockford)撰写的“ Javascript:好的部分”.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐