2009-06-09 47 views
6

我正在做一个项目,我们正在做一个自定义的JavaScript,特别是jQuery,在一个mvc风格的项目上。重构越来越多的javascript/jquery函数的好方法是什么?

唯一的问题是我不断添加越来越多的全局函数/变量,它们堆积如山。我有几个文件,但我不确定如何将一些东西分成单独的文件。我想过把这些函数和全局变量的一部分写入对象,但是在javascript中的对象语法对我来说似乎有些尴尬(因为没有经典类)。虽然如果我有一个很好的例子,也许我可以回来。

你如何处理全球JavaScript函数和变量开始堆积如此的项目?

+0

我不认为JavaScript的对象语法可以合理地描述为黑客。如果有的话,这是语言中最优雅的部分。如果你的意思是试图在痛苦的时候强迫上课,我完全同意你的看法。它是一种面向对象的语言,而不是基于类的语言。 – Nosredna 2009-06-09 22:40:26

回答

11

一个非常简单的方法来堆上一堆全局变量和函数到一个全局对象:

// Awful pile of globally-scoped names 
var foo = 1 
var bar = 2 
function go = function(){ 
    console.log('Yeehaw!'); 
} 


// Instead, just dump everything into a global-level object 
var MyApp = { 
    foo: 1, 
    bar: 2, 
    go: function(){ 
     console.log('Yeehaw!'); 
    } 
} 

// Now access stuff like this 
console.log(MyApp.foo); 
console.log(MyApp.bar); 
MyApp.go(); 

对于“简单”的顶级变量和函数,我可以推荐这个。可以做出很多改进,但它们可能会属于过早优化的范畴;这是一个伟大的第一步。

+0

非常干净的解决方案。我将在我的javascript中使用该方法。 +1 – ichiban 2009-06-09 22:34:21

+0

这也是我所做的。 – 2009-06-09 22:37:39

+0

是的。 MyApp方法将通过“this”访问MyApp中的其他所有内容。MyApp之外的任何内容都将使用MyApp前缀而不是此。也适用于由事件或计时器触发的任何事物。 – Nosredna 2009-06-09 22:44:55

1

你可以同样打破他们到jquery.ui做什么......按类别或动作/控制

例如:

effects.blind.js
effects.bounce.js
ui.accordion.js

它们可以分解成它们处理的控件吗?

或者他们做什么?

只是一些建议...

2

上YUI剧场的克罗克福德影片是如何建立除其他事项外JavaScript的命名空间的一个很好的例子。