我在文件中有一个枚举:
goog.provide('animals.Fish');
animals.Fish = function(obj) {
this.name_ = obj[animals.Fish.Properties.NAME];
this.awesomenessLevel_ = obj[animals.Fish.Properties.AWESOMENESS];
}
/**
* Public list of properties.
* @enum {string}
*/
animals.Fish.Properties = {
NAME: 'name',
AWESOMENESS: 'awesomenessLevel',
}
为什么我不能像这样在另一个类中作为Fish的静态字段访问此枚举?
goog.require('animals.Fish');
...
var tuna = new animals.Fish(
animals.Fish.NAME: 'tuna',
animals.Fish.AWESOMENESS: '100'
)
...
答案 0 :(得分:1)
Closure枚举类型基于来自Java和C ++等语言的Enum Types概念。在Java中,枚举类型定义如下:
枚举类型是一种类型,其字段由一组固定的常量组成。常见示例包括罗盘方向(NORTH,SOUTH,EAST和WEST的值)和星期几。
在上面的示例中,animals.Fish.Properties
应该表示为record type,因为指定的值不是常量。在下面的示例中,animals.Fish.Properties
已重命名为animals.Properties
,因此可以应用于任何类型的动物(不仅仅是鱼)。
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_;
};
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
之后不应该有逗号。此外,在第二个文件中,您需要使用完全限定的枚举名称。因此animals.Fish.NAME
代替animals.Fish.Properties.NAME
而不是{{1}}。