ネームパス

ネームパスとは

ネームパスとは、オブジェクトの住所です。

オブジェクトのメンバの場合は実際の JavaScript のコードとまったく同じになるのですが、関数のprototypeメンバの場合と内部関数の場合は指定の仕方が異なります。

オブジェクトのネームパス

以下のようなオブジェクトのメンバを考えます。

var Asia = { Japan: { Tokyo: 'I am here!' } };

この場合の Tokyo のネームパスは Asia.Japan.Tokyo となります。JavaScriptによる表記方法と同じですね。

関数のネームパス

静的メンバの場合はオブジェクトのメンバのネームパスとまったく同じです。

var Asia = function() {};

Asia.Japan = function() {};

Asia.Japan.Tokyo = 'I am here!';

この場合の Tokyo のネームパスは Asia.Japan.Tokyo となります。

注意が必要なのは、prototypeのメンバです。

var Asia = function() {};

Asia.Japan = function() {};

Asia.Japan.prototype.Tokyo = 'I am here!';

この場合はインスタンス前置詞 #を用いて。Asia.Japan#Tokyoとなります。

内部関数のネームパス

var Asia = function() {};

Asia.Japan = function() {

var Tokyo = function() { /* I'm here! */ };

};

この場合の Tokyo のネームパスは内部関数前置詞 -を用いてAsia.Japan-Tokyoとなります。

モジュールのネームパス

CommonJS (Node.jsやRhino)や、RequireJsなどによるモジュールのネームパスの先頭は module: で始まるようにします。ただし、 @module @exports には普通に書いて良いようです(公式)。

/**

* @alias module: foo/bar

*/

var module = require('foo/bar');

型指定との違い

型指定にはインスタンスメンバ・内部関数を用いることはできません。ドキュメント対象がインスタンスメンバ・内部関数でなければ、型指定とネームパスは {} 記号の有無を除けば同じになります。また、ネームパスは型指定とは異なり” StringNumber のどちらか”というような複雑な指定ができません。