1. ホーム
  2. ジャバスクリプト

[解決済み】オブジェクト指向のJavascriptのベストプラクティス?[クローズド]

2022-04-19 09:08:55

質問

今、私は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でご覧ください。