【发布时间】:2012-07-22 22:04:47
【问题描述】:
我正在尝试编写“更好”的 javascript。
以下是我发现并尝试采用的一种模式。但是,我对它的使用有点困惑。
比如说,我有一个名为“工作”的页面。该页面上的任何 JS 功能都将封装在以下内容中:
window.jobs = (function(jobs, $, undefined){
return {
addNew: function(){
// job-adding code
}
}
})(window.jobs|| {}, jQuery);
$(function(){
$('.add_job').on('click', function(event){
event.preventDefault();
window.jobs.addNew();
});
});
正如您可能推断的那样,我所做的只是用对全局作业对象中的函数的调用替换了本应位于匿名事件处理函数中的所有代码。我不知道为什么这是一件好事,除了它减少了可变碰撞的可能性并使整个事情变得更整洁,但这对我来说已经足够了。
这个——可能相当明显——的问题是:我所有的事件绑定初始化类型的东西仍然坐在我闪亮的新工作对象之外:它应该在哪里?在工作对象内部?在作业对象内的返回对象内?在 init() 函数内部?
我只是想了解一个稳定的基本框架,用于放入简单的功能。我不是在构建 JS 应用程序,我只是想编写比实际更健壮和可维护的代码现在。热烈欢迎任何和所有建议:)
【问题讨论】:
-
非常感谢您提供的非常有帮助的答案;我知道那里有大量信息,来自 Crockfords、Osmanis 和 Resigs,但是将这些概念与您自己的代码相关地解释是非常有帮助的。我会将 jAndy 的回答标记为已接受,因为虽然我显然无法说明哪个是“正确”的解决方案,但他的回答似乎最好地解释了我应该如何应用我正在采取的方法。
标签: javascript jquery design-patterns modular