[解決済み】オブジェクト指向のJavascriptのベストプラクティス?[クローズド]
質問
今、私はJavascriptで大きなプロジェクトをコーディングしていることに気づきました。この前のプロジェクトはかなり冒険だったことを覚えている。なぜなら、雑なJSはすぐに読めなくなるからで、このコードをきれいにしたい。
私はオブジェクトを使ってライブラリを構築していますが、JSでは物事を定義する方法がいくつかあり、スコープ、メモリ管理、名前空間などにおいて重要な結果を暗示しています。例.
-
を使って
var
を使用するかどうか。 -
を定義することは、ファイルの中で、あるいは
(function(){...})()
のように、jqueryスタイルになります。 -
使用
this
を使用するか、しないか。 -
使用
function myname()
またはmyname = function()
; - オブジェクトの本体でメソッドを定義するか、"prototype"を使用します。
- などです。
では、JSでOOコーディングをする際のベストプラクティスは何でしょうか?
学術的な解説を期待します。品質と堅牢性を扱っている限り、本へのリンクは大歓迎です。
EDIT :
しかし、上記の質問に対する答えや、ベストプラクティスにとても興味があります。
どのように解決するのですか?
var` を使用するかどうか
変数の導入は
var
さもないと、グローバルスコープに到達してしまいます。
特筆すべきは、ストリクトモード(
"use strict";
)
宣言されていない変数の代入は、次のようにスローされます。
ReferenceError
.
現在のところ、JavaScriptにはブロックスコープがありません。クロックフォード校では、次のように教えています。
関数本体の先頭に var 文を置く。
一方、Dojo のスタイルガイドでは、次のように書かれています。
すべての変数は、可能な限り小さなスコープで宣言されるべきです。
. (その
let
ステートメントと定義
は JavaScript 1.7 で導入されましたが、ECMAScript 標準の一部ではありません)。
定期的に使用するオブジェクトのプロパティは、ローカル変数にバインドしておくと、スコープチェーン全体を検索するよりも高速に処理できます。(参照 JavaScriptを最適化し、パフォーマンスとメモリ消費量を大幅に削減する。 .)
ファイルの中で定義したり、`(function(){...})()`の中で定義すること
コードの外からオブジェクトに到達する必要がない場合は、コード全体を関数式で囲むことができます。これはモジュールパターンと呼ばれるもので、パフォーマンス上の利点があり、また、コードをミニマイズして高いレベルで隠蔽することができる。また、グローバルな名前空間を汚染しないようにすることもできる。 JavaScriptでの関数のラップ は、アスペクト指向の動作を追加することも可能です。Ben Cherryは モジュールパターンに関する詳細な記事 .
this` を使うかどうか
JavaScript で擬似的な古典的継承を行う場合、このメソッドを使用しない手はありません。
this
. どの継承パターンを使うかは、好みの問題です。その他のケースについては、Peter Michauxの記事
JavaScript ウィジェット "this"がない場合。
.
function myname()` または `myname = function();` を使用する。
function myname()
は関数宣言であり
myname = function();
は関数式で、変数
myname
. 後者の形式は、関数がファーストクラスのオブジェクトであり、変数と同じように何でもできることを表しています。両者の唯一の違いは、すべての関数宣言がスコープの先頭に持ち上げられることであり、これは場合によっては重要なことかもしれない。それ以外は同じです。
function foo()
は省略形です。ホイスティングの詳細については
JavaScriptのスコープとホイスティング
の記事をご覧ください。
オブジェクトの本体でメソッドを定義するか、"prototype"を使用します。
それはあなた次第です。JavaScript には 4 つのオブジェクト作成パターンがあります: 擬似クラシック、プロトタイプ、機能的、そしてパーツ ( Crockford, 2008 ). それぞれに長所と短所がある。 クロックフォード氏による講演ビデオ または、彼の著書 ザ・グッドパーツ として Anonから既に提案されている .
フレームワーク
JavaScriptのフレームワークをいくつかピックアップして、その規約やスタイルを勉強し、自分に一番合うプラクティスやパターンを見つけるといいと思います。例えば Dojo ツールキット は、オブジェクト指向のJavaScriptコードを書くための堅牢なフレームワークを提供し、多重継承もサポートしています。
パターン
最後に、専門ブログがあります。 JavaScriptの一般的なパターンとアンチパターンを探る . また、質問もチェックしてください。 JavaScriptのコーディング規約はありますか? をStack Overflowでご覧ください。
関連
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】 \u003C とは何ですか?
-
[解決済み] JavaScriptのコーディング規約はありますか?[クローズド]