如何隔离我的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?