投稿

10月, 2018の投稿を表示しています

Node.jsのモジュール機能について

Follow @venividivici830 Node.jsのモジュール機能について学習した。 モジュール機能は、サーバーサイドJavaScriptの標準APIの仕様を定めるプロジェクトであるCommonJSでも、早い時期から規格化と実装が進んでいたようだ。 モジュールは、プログラムのソース・ファイルを複数ファイルに分けて管理し、名前空間を分離することを可能にする、Node.js自体が提供する言語機能である。 Nodeのバージョンは、 $ node -v v10.9.0 モジュールのエクスポートとインポート 下記の構成で、2つのファイルを使って検証した。 $ pwd /Users/ user /Desktop/node_test $ ls   Animal.js main.js まずは、モジュールとして利用される側。 moduleという名前のオブジェクトが、最初から存在する。 moduleオブジェクトのexportsプロパティが参照するオブジェクトのプロパティに、エクスポートするオブジェクトを設定することで、オブジェクトをエクスポートできる。 Animal.js var Animal = function () {} module . exports . Animal = Animal ; モジュールとして利用する側は、require関数を使う。 require関数の引数には、ファイル名を指定する。ファイル名の.jsは省略できる。 main.js var lib = require ( './Animal' ) var animal = new lib . Animal (); 当然下記のようにも書ける。 var Animal = require ( './Animal' ). Animal ; var animal = new Animal (); 実行すると、特にエラーなく処理が終了する。 $ node main.js   モジュールは、デフォルトでグローバルの名前空間を汚染しない。 下記のよう

JavaScriptのプロトタイプ継承について

イメージ
Follow @venividivici830 JavaScriptのプロトタイプ継承について、以下にまとめた。 下記の本に詳細に書かれており、非常に参考になった。 パーフェクトJavaScript (PERFECT SERIES 4) 井上 誠一郎  (著), 土江 拓郎 (著), 浜辺 将太 (著) 勉強中のため、間違いがあれば指摘をいただけると幸いである。 プロトタイプ継承とプロトタイプチェーン プロトタイプ継承は、下記のように定義できると思う。 コンストラクターのprototypeプロパティが参照するオブジェクトのプロパティが、インスタンスに継承される仕組み これにより、効率的なインスタンスメソッドの実装や、Javaのような継承を実装できる。 下記のJavaScriptの仕様を利用している。 コンストラクターは、関数である 関数は、オブジェクトである 全ての関数は、prototypeという名前のプロパティを持つ 全てのオブジェクトは、オブジェクト生成に使ったコンストラクターのprototypeプロパティが参照するオブジェクトへの隠しリンク(暗黙リンク)を持つ オブジェクトのプロパティが読み込まれる時は、プロパティは下記の順で探される。この仕様が、プロトタイプチェーンである。 オブジェクト自身のプロパティ 暗黙リンク先のオブジェクトのプロパティ 暗黙リンク先のオブジェクトの、暗黙リンク先のオブジェクトのプロパティ これを繰り返し、Object.prototypeが参照するオブジェクトで終わる 上述した内容を図で表すと、下図のようになる。 上図により、インスタンスメソッドを定義する下記のコードや、 var Person = function ( name ) { this . _name = name ; } Person . prototype . getName = function () { return this . _name ; } 継承する際の下記のコードについて、理解が深まると思う。 var Dog = function () {} Dog . prototype = ne