构建我的JS图书馆,几个问题
-
29-09-2019 - |
题
我正在建立一个库(https://github.com/oscargodson/storagelocker),这是一个localstorage包装器,更准确地说,但是因为这是我在OO JavaScript上的第一次尝试,所以我仍在学习,我有几个问题。
我在其他库中看到,有时它们会以匿名功能包裹它们。我是,还是我应该这样做?如果是这样,什么都没有破坏任何东西?
对于内部API(基本上是内部功能),我应该如何编写它们?应该将它们添加到主要对象
storageLocker.prototype.myInternalFunction()
要不就myInternalFunction()
在我的脚本中随机?我不希望这些函数是全局的...例如,其中一个功能只是检查JSON中的一堆项目,查看其对象,然后检查对象类型是什么(如Date()
)然后转换。我应该如何/在哪里添加全球脚本,vars?例如,我有一个var呼叫
patterns
那是类似的var patterns = {"date":/\/Date\(([0-9]+)\)\//}
我应该如何将其添加到我的脚本中?
非常感谢。我想写我的脚本 正确的方法 所以我问你们。我不知道当地有任何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
对象,它返回“公共”对象,但是该对象可以访问 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并保留变量“私有”