我正在建立一个库(https://github.com/oscargodson/storagelocker),这是一个localstorage包装器,更准确地说,但是因为这是我在OO JavaScript上的第一次尝试,所以我仍在学习,我有几个问题。

  1. 我在其他库中看到,有时它们会以匿名功能包裹它们。我是,还是我应该这样做?如果是这样,什么都没有破坏任何东西?

  2. 对于内部API(基本上是内部功能),我应该如何编写它们?应该将它们添加到主要对象 storageLocker.prototype.myInternalFunction() 要不就 myInternalFunction() 在我的脚本中随机?我不希望这些函数是全局的...例如,其中一个功能只是检查JSON中的一堆项目,查看其对象,然后检查对象类型是什么(如 Date())然后转换。

  3. 我应该如何/在哪里添加全球脚本,vars?例如,我有一个var呼叫 patterns 那是类似的 var patterns = {"date":/\/Date\(([0-9]+)\)\//} 我应该如何将其添加到我的脚本中?

非常感谢。我想写我的脚本 正确的方法 所以我问你们。我不知道当地有任何JS的人,他们都是老式的类型...

有帮助吗?

解决方案

http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-iented-javascript-follow-pollow-part-part-2-technical/

在值得阅读的命名领域方面有一个不错的部分。

http://yuiblog.com/blog/2007/06/12/module-pattern/

也是另一个不错的概述。

有关良好JavaScript实践的更多优质材料,请查看

http://javascript.crockford.com/

在评论中讨论之后,我对此进行了更改:

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 对象,它返回“公共”对象,但是该对象可以访问 storageLocker闭合的范围。

也许还有其他更好的方法可以通过退还 storageLocker 对象本身,但这需要更多的思考。

其他提示

我会说:

1)该技术的目的不是污染全局名称空间。这是一件好事。在下面的示例中,您可以看到与库的所有互动都是通过一个对象mylibrary。公共API是匿名函数的返回值。

var MyLibrary = function() {
// private
   this.InternalVariable = 'some value';

   function internalFunction(x,y) {
      return x + y;
      }

     function getInternalVariable() {
    return this.InternalVariable;
}
// public
   return {
      publicVariable : '1.0',
      publicFunction : function(x,y) {
         return x + y
         },
 accessInternalVariable : function() {

     return getInternalVariable();
     }
      }
   }();

2)另请参见上面有关如何放置“内部”功能的示例

3)如果您的全局变量是某种配置选项,我只会制作公共设置器/getter并保留变量“私有”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top