私のJSライブラリを構築し、いくつかの質問があります
-
29-09-2019 - |
質問
私はライブラリ(https://github.com/oscargodson/storagelocker)を構築しています。これは、より正確にはローカルストラージラッパーですが、これはoo javascriptでの私の最初の試みであり、まだ学習しているので、いくつかの質問があります。
他の図書館で、時には匿名の関数でそれらを包むことがあることを見てきました。私はこれでそれをすべきですか?もしそうなら、何も壊すことなくどのように?
内部API(基本的に、内部関数)の場合、それらをどのように記述する必要がありますか?それらをメインオブジェクトに追加する必要があります
storageLocker.prototype.myInternalFunction()
あるいは単にmyInternalFunction()
私のスクリプトでランダムに?私は機能をグローバルにしたくありませんでした...たとえば、関数の1つは、JSONのアイテムの束をチェックし、オブジェクトを確認し、オブジェクトタイプが何であるかをチェックするだけです(Date()
)そしてそれを変換します。どのように/どこにグローバルを追加すればよいか、スクリプトにvarsに追加すればよいですか?たとえば、私はvarと呼ばれています
patterns
それはようなものですvar patterns = {"date":/\/Date\(([0-9]+)\)\//}
スクリプトにそれを追加するにはどうすればよいですか?
どうもありがとう。スクリプトを書きたいです 正しい方法 だから私はあなたたちを尋ねています。私は地元のJSの男を知りません。
解決
http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-part-2-technical/
名前を読む価値のある名前のセクションがあります。
また、もう1つの良い概要です。
優れた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)この手法の目的は、グローバルネームスペースを汚染しないことです。それは良いことです。以下の例では、ライブラリとのすべての相互作用が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)グローバル変数がある種の構成オプションである場合、パブリックセッター/ゲッターを作成し、変数を「プライベート」に保ちました。