ネームパス
ネームパスとは
ネームパスとは、オブジェクトの住所です。
オブジェクトのメンバの場合は実際の 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');
型指定との違い
型指定にはインスタンスメンバ・内部関数を用いることはできません。ドキュメント対象がインスタンスメンバ・内部関数でなければ、型指定とネームパスは {} 記号の有無を除けば同じになります。また、ネームパスは型指定とは異なり” String と Number のどちらか”というような複雑な指定ができません。