2011-10-05 48 views
1

我正在更新由另一个开发人员创建的一些代码,并且注意到有很多,我可以最好地描述为函数内部的函数,并且整个对象都设置为一个变量。将javascript/jquery函数设置为变量..最佳实践?为什么?

例如:

var spellcheck = { 
checkone: function() {  
    <....> 
    spellcheck.jspspellcheck.startSpellCheck("/SpellChecker/", $(e.target).parent().prev('input:enabled, textarea:enabled')); 

}, 
jspspellcheck: { 
    <....> 
    startSpellCheck: function(baseUrl,elements){ 
     <....>   
     spellcheck.jspspellcheck.openCenteredWindow(); 
    } 
} 
} 

显然上面的代码只是一个样本,但它确实illistrate如何了很多的jQuery的写入。

从点符号我看起来它是利用面向对象类型的做法,但其他函数内部的“函数”变得相当混乱(至少对我来说)。基本上,我应该尝试并将此代码重构为不同的命名函数,还是我错过了一些最佳实践?

+1

是的,直到你习惯于看到它,这是令人困惑的。不,你不应该改变它。这些功能是他们出于某种原因所在的地方。例如,构建jQuery插件的“官方”方式(http://docs.jquery.com/Plugins/Authoring#Plugin_Methods)建议以这种方式构建一个函数对象。 – Blazemonger

回答

0

这不会真的是“重构”,它会“移动”。不是重构其中的一部分不会很好 - 从发布的代码无法分辨出来。

但你为什么要?他们在那里让它们远离全局命名空间(一种模块化JS代码的方式)。

+0

为什么整个函数调用的主要原因是附加到锚标签的“onClick”,这似乎并没有工作(我得到一个错误“spellcheck.checkone不是一个函数”我试图找出原因,越多挖掘越难追踪 – wblakenc

+0

@wblakenc首先做一个“spellcheck”和“spellcheck.checkone”的警告/日志,并且/或者确保JS文件是甚至是加载 - 我的意思是,显然这是一个函数,所以也许其他事情正在发生。 –

+0

你得到的是spellcheck.checkone不是函数,因为你需要从你的拼写检查返回映射到内部函数。在你的例子结束时,你应该返回{checkone:checkone,jspspellcheck:jspspellcheck}; – jbabey