RuBrain,
Что-то у вас отличается, второй вариант не имеет смысла, оно итак так.
var proto = enumeration.prototype = {
constructor: enumeration, // Identify type
toString: function() { return this.name; }, // Return name
valueOf: function() { return this.value; }, // Return value
toJSON: function() { return this.name; } // For serialization
};
var proto = enumeration.prototype = {
constructor: enumeration, // Identify type
};
И что-то сам автор начудил с этой функцией enumeration, как-то это он не по javascript-ному сделал, зачем-то всё засунул в свойства функции и запретил ее вызывать, наверное по опыту из какого-то другого языка, где всякие статические классы есть, он это сделал, но без лишних понтов смысл такой:
function Enumeration(namesToValues) {
this.values = [];
for (var name in namesToValues) {
var enumerable = new Enumerable(name, namesToValues[name]);
this[name] = enumerable;
this.values.push(enumerable);
}
}
Enumeration.prototype.foreach = function(callback, context) {
for (var i = 0; i < this.values.length; i++) callback.call(context, this.values[i]);
};
Enumeration.prototype.print = function() {
console.log(this.values);
};
function Enumerable(name, value) {
this.name = name;
this.value = value;
}
Enumerable.prototype.toString = function() { return this.name; };
Enumerable.prototype.valueOf = function() { return this.value; };
Enumerable.prototype.toJSON = function() { return this.name; };
console.log('Suit', new Enumeration({Clubs: 1, Diamonds: 2, Hearts:3, Spades:4}));