我应该封装我的JavaScript库吗?

3

我有大约600行的JavaScript代码,执行ajax调用、DOM操作、测试处理等功能。

我希望将它制作成一个可以供他人使用的库。

如何做到这一点呢?

我最初的想法是将整个库封装在模块模式中。之前有人建议我这样做来帮助解决 www.jshint.com 的问题。

但我认为这对于一般情况也是个好主意。

  • 我应该封装整个库吗?
  • 我应该使用模块模式吗?
2个回答

6
"

信息隐藏是一种古老而广为人知的方法,可以使代码更安全、更模块化。它是许多令人惊叹的东西(如抽象数据类型面向对象编程)背后的基本原则之一。

"
(是的,本地变量和模块模式是在Javascript中隐藏代码的唯一方法)
var MyModule = (function(){
    //variables in the wrapper function are local and
    // can't be seen elsewhere

    var my_var;

    function my_private_implementation_function(){ ... }

    function my_api_function(){
    }

    //return public functions
    return {
       my_api_function: my_api_function
    };
}()); //immediatelly run the module code
      //and set MyModule to the return value

//Now we can use things exported from the module

MyModule.my_api_function();

//but we can't access the prvate stuff

MyModule.my_var; //can't do this

你能推荐一个简单的方法来做这个吗...例如 var my_lib = {/所有代码/} - user656925
1
模块模式的代码形式类似于 var Module = (function(){ ... 所有的代码 ... 返回包含公共函数的对象; }()); - hugomg
@Esailija 这取决于你如何实现它。你可以返回一个可用作许多对象构造函数的对象,或者有效地返回一个单例。 - Matt
@Esailija 例如 var NotSingleton = (function() { var entity = function() {}; return entity; })(); var Singleton = (function() { var entity = function() {}; return new entity; })(); - Matt
@missingno,我有很多事情要说,有时间聊天吗? - Esailija
显示剩余9条评论

0

我认为封装代码的方式,如何将其暴露给DOM,与之交互或任何其他事情,完全取决于您想要使用它的方式以及您使用它的上下文。 编码模式都有自己独特的目的,因此选择一个模式是因为它为您提供了什么,例如编码易用性、性能或变量暴露。 所以如果你问我,不要使用模式,因为你应该使用模式,而是因为它最适合你想要做的事情。

除此之外,我建议封装(如果您正在谈论将代码包装在闭包中)以避免混淆全局对象,从而避免变量冲突,使您的代码更可靠,因为存在更少的错误风险。

希望这可以帮助PM5544...


这个能起到初步作用吗?var my_lib = {/我的代码/};以避免全局命名空间混乱? - user656925
这确实只会创建一个全局变量,但如果您希望将全局变量的数量保持绝对最少,可以将代码包装在一个闭包中,例如: (function(){ //这里是库代码 }())但这也意味着“外部”无法进入封闭作用域。 - PM5544

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接