クロージャ列挙型は、Java や C++ などの言語の列挙型の概念に基づいています。Java では、列挙型は次のように定義されています。
列挙型は、フィールドが定数の固定セットで構成される型です。一般的な例には、コンパスの方向 (NORTH、SOUTH、EAST、および WEST の値) と曜日が含まれます。
上記の例では、割り当てられた値は定数ではないため、おそらくレコード タイプanimals.Fish.Properties
として表す必要があります。以下の例では、魚だけでなく、あらゆる種類の動物に適用できるように名前が変更されています。animals.Fish.Properties
animals.Properties
fish.js
goog.provide('animals.Fish');
goog.provide('animals.Properties');
/** @typedef {{name: string, awesomeness: string}} */
animals.Properties;
/**
* @param {animals.Properties} properties Animal properties.
* @constructor
*/
animals.Fish = function(properties) {
/** @type {string} */
this.name_ = properties.name;
/** @type {string} */
this.awesomenessLevel_ = properties.awesomeness;
};
/**
* @return {string} The name of the fish.
*/
animals.Fish.prototype.getName = function() {
return this.name_;
};
animal_app.js
goog.provide('animals.app');
goog.require('animals.Fish');
animals.app.tuna = new animals.Fish({name: 'tuna', awesomeness: '100'});
alert(animals.app.tuna.getName()); // alerts 'tuna'
AWESOMENESS: 'awesomenessLevel'
ちなみに、元の例では、 の定義で
: の後にカンマがあってはなりませんanimals.Fish.Properties
。さらに、2 番目のファイルでは、完全修飾列挙名を使用する必要があります。したがって、代わりにanimals.Fish.NAME
になりますanimals.Fish.Properties.NAME
。