如何隔离我的JavaScript代码以防止碰撞?

我一直在写很多JavaScript函数和事件监听器,我想将它们移动到它们自己的命名空间中,当我将其与其他javascript文件连接并缩小时,不会发生冲突。

我仍然对JavaScript不熟悉,所以可能有简单的解决方案来解决这个问题。 我开始创建一个JavaScript对象:

var MySpecialStuff = {
    init: function(){
        //do everything here
    }
};

然后在我的html中,我想要使用它的页面上,我可以初始化这段代码:

<script>
    MySpecialStuff.init();
</script>

但是,然后init方法开始增长,我需要开始将代码分解成更小的块,但是我停留在语法以及如何设置私有方法/变量并从init方法和其他私有方法中调用它们。 我怎样才能做到这一点?

我是否朝着正确的方向前进? 我可以/应该采取哪些其他方式来做这种事情?


你正朝着正确的方向前进。 您可以使用模块模式创建一个具有私有成员和对象的方法,如下所示:

var foo = function(){
  var bar = ""; //private

  function funk(){
    //private function    
    return "stuff";
  }

  return{
    getBar: function(){
      return bar;
    },
    init: function(){
      alert(funk());
    },
    randomMember: 0 //public member
  }


}();

只有返回块中的内容是公共的,但您可以调用任何私有方法/访问返回块中的任何私有方法。


感谢约瑟连接到另一个解释这种方法的SO问题:

另一种方法来实现它,我认为它比对象字面形式有一点限制:

var MySpecialStuff = new function() {

    var privateFunction = function() {

    };

    this.init = function() {

    };
};

我喜欢将我的代码进一步细分为更模块化的方法。 因此,假设我们有一个包含博客帖子,页面菜单和侧边栏列表的页面。 我最终会这样做:

var blog_controller = {
    init: function(){
      document.getElementById('some_element').addEvent('click', this.handleSomeClick);
      this.applySomePlugin(); 
    },
    applySomePlugin: function () {
      /* do whatever needs to happen */
    },
    handleSomeClick: function () {
      // scope will be element
      this.style.color = 'red';
    }
};
var page_menu_controller = {
    init: function(){
      document.getElementById('some_other_element').addEvent('click', this.handleSomeClick);

    },
    handleSomeClick: function () {
      // scope will be element
      this.style.color = 'blue';
    }
};

... 等等。 这使代码按目的组织,有助于保持作用域清晰,并允许您重复使用经常发生的代码元素(例如,如果您在新博客文章中使用AJAX,则可以再次调用this.applySomePlugin )。

这当然是一个快速而肮脏的例子,但我希望你明白

链接地址: http://www.djcxy.com/p/17071.html

上一篇: How to isolate my javascript code to prevent collisions?

下一篇: What's the best way to create a JavaScript namespace?