我正在构建一个库(https://github.com/OscarGodson/storageLocker),更确切地说是localStorage包装器,但是因为这是我第一次尝试使用OO JavaScript,所以我仍在学习,并且还有几个问题。

  • 我在其他库中看到有时将它们包装在匿名函数中。我是应该这样做吗?如果是这样,又如何不破坏任何内容?
  • 对于内部API(基本上是内部函数),我应该如何编写它们?应该将它们添加到主要对象中,例如storageLocker.prototype.myInternalFunction()还是我的脚本中只是myInternalFunction()?我不希望这些函数是全局的...例如,其中一个函数只是检查JSON中的一堆项目,查看它们的对象,然后检查对象的类型(例如Date()),然后进行转换它。
  • 如何/在哪里向脚本中添加全局变量vars?例如我有一个名为patterns的变量,它类似于var patterns = {"date":/\/Date\(([0-9]+)\)\//},应如何将其添加到脚本中?

  • 非常感谢。我想用正确的方式写我的剧本,所以我问你们。我不知道本地有没有做过OO JS的JS家伙,他们都是老派...

    最佳答案



    在命名空间上有不错的部分值得一读。



    也是另一个很好的概述。

    有关优秀javascript做法的更多信息,请查看



    在评论中进行讨论之后,我将示例更改为:

    var storageLocker = function (selector) {
    
        var _selector = selector || "default value";
    
        function myPrivateFunction() {
    
        }
    
        var public = {
    
            get: function () {
                return _selector;
            },
    
            uppercase : function () {
                _selector = _selector.toUpperCase()
                return this;
            }
    
        }
        return public;
    
    };
    
    // use:
    var test = storageLocker("search for this").uppercase().get();;
    
    alert(test);
    

    虽然这并不是库/模块的示例(因为您是通过直接调用构造函数来访问代码的),但它是将同一对象保留在范围内以便进一步链接方法的示例。实际上,它不是在返回storageLocker对象,而是在返回“public”对象,但是该对象可以通过闭包访问storageLocker的范围。

    还有其他更好的方法可以通过返回storageLocker对象本身来完成此操作,但这需要更多的思考。

    09-10 00:32