var Gallery = Backbone.Controller.extend({
_index: null,
_photos: null,
_album :null,
_subalbums:null,
_subphotos:null,
_data:null,
_photosview:null,
_currentsub:null,
routes: {
"": "index",
"subalbum/:id": "subindex",
"subalbum/:id/" : "directphoto",
"subalbum/:id/:num" : "hashphoto"
},
initialize: function(options) {
var ws = this;
if (this._index === null){
$.ajax({
url: 'data/album1.json',
dataType: 'json',
data: {},
success: function(data) {
ws._data = data;
ws._photos =
new PhotoCollection(data);
ws._index =
new IndexView({model: ws._photos});
Backbone.history.loadUrl();
}
});
return this;
}
return this;
},
//Handle rendering the initial view for the
//application
index: function() {
this._index.render();
},
私はここでbackbone.jsのチュートリアルを読んでいます: http://addyosmani.com/blog/building-spas-jquerys-best-friends/
アンダースコアとは何ですか? (_index、_photos、_album)なぜそれらを使用するのですか?
プライベートフィールドまたはプライベートメソッドを意味します。内部使用専用のメソッド。
クラスの外部で呼び出さないでください。
プライベートフィールドには、内部で使用するデータが含まれています。
クラスの外部から(直接)読み取ったり、書き込んだりしないでください。
変数にアンダースコアを追加するだけではプライベートにならず、命名規則にすぎないことに注意することが非常に重要です。
私が知る限り、一般にプライベート変数を示すために使用されます(ただし、実際にはプライバシーを提供するものではなく、単なる慣習です)。
ここでは簡単に説明しますが、次のことは避けてください: http://javascript.crockford.com/code.html
_varname
のように使用すると、変数名の一部にすぎず、javascriptの意味はありません。開発者はこれを使用して、変数の意味または範囲を示します。この場合、この変数はローカル変数またはプライベート変数であることを開発者に伝えているように見えます。
注意すべきいくつかの点は、_.varname
を使用するこの特定の例では、underscore.jsライブラリーを使用して変数または関数を意味します。また、_varname
を使用してアンダースコアオブジェクトを保持する変数を表すことができます。同様に、オフィスでは、$varname
を使用してJqueryオブジェクトを含む変数を表します。
内部/プライベートプロパティをマークするためにおそらく使用されます。 pythonのように変数にアンダースコアを付けると、変数が内部変数であり、改ざんしないほうがよいという簡単な方法です(そうする場合は、関係するライブラリが問題を引き起こす可能性があります)。
通常、_
は、問題のプライベート/保護された変数であることをユーザー/プログラマーに伝えるために使用されます。
これはわずかな補遺です。すでに答えたように、これらは疑似プライベート変数です。ただし、これらのプライベート変数にアクセスする疑似パブリック関数を作成することは可能です。
これを効果的に持っている同僚のコードに混乱しました(ただし、別のライブラリに非常に深く埋まっています)。
_class x {
constructor(id) {this._id = id}
get id() {return this._id}
}
let y = new x(3)
_
これで、_y.id
_と_y._id
_の両方が機能し、同じ値を返します。ただし、console.log(y)
を実行すると、__id
_キーのみが表示されます。
前述のように、これは多くの開発者の間で行われていることであり、悪いことです。プログラミング方法でこのような規則に頼る必要がある場合は、言語を使用する前に、言語、方法、およびパターンを学習する必要があります。 「アンダースコア」を使用せずにコード内のパブリックメソッドとプライベートメソッドを区別できない場合、ドキュメント作成スキルは非常に不足しています。ウェブ上の公開プロジェクトの多くは非常に不十分に文書化されており、おそらく「アンダースコア」の慣習が教育を受けたほとんどの開発者によって「受け入れられた」のに対して、他の人は正式な設計パターンと方法を維持するのではなく、フローを採用することを決めたのでしょう。 「アンダースコア」がES6/7バージョンに書き込まれなかった理由があります。
最近ブログで、ソフトウェアエンジニアマネージャーに出会いました。「アンダースコアの命名規則により、変数関数がパブリックであるかプライベートであるかが一目でわかります。 " 。私の応答は次のとおりです。「コメントは写真のようなものです。この場合、コメントは数千アンダースコアの価値があります。
Doxygenと呼ばれる無料のドキュメントツールがあります。 JavaScriptを特にサポートしていませんが、コメントでDoxygenプレフィックスを使用すると、JavaScriptアプリケーションの専門的なドキュメントを生成できます。開発者とユーザーの両方がコードコメントに少し努力を払えば、ドキュメントを使用してJavaScriptアプリケーションを作成するのは本当に簡単です。
コメントを削除できるツールと、「Production Releases」のコンソールステートメントがあることを忘れないでください。そうは言っても、ソースマップの使用は時間とリソースの浪費でもあります。パブリッシュする準備が整うまで縮小しないでください。つまり、Dev Build(縮小、コメントとコンソールステートメントの保持)、Release Build(コメント、コンソールステートメントの削除、Devビルドの縮小。リリース時にDevビルドを再コンパイルする必要はありません。品質の高いコードは、リリースの準備とデプロイを行うだけです)。