Показать сообщение отдельно
  #13 (permalink)  
Старый 02.08.2018, 14:15
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

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}));

Последний раз редактировалось Rise, 02.08.2018 в 15:03.
Ответить с цитированием