Динамическая реализация в JavaScript - PullRequest
3 голосов
/ 02 августа 2011

У меня есть выпадающий список, содержащий классификации валют, которые могут быть созданы как «класс» JavaScript. В настоящее время я использую оператор switch для этого, но я абсолютно уверен, что есть более красноречивый способ сделать это. Так может кто-нибудь показать мне лучший способ?

Есть ли лучший способ динамически создать класс?:

function ddlCurrency_selectedIndexChanged() {

    var currency = null;

    switch (this.value) {
        case "Dollar":
            currency = new Dollar(null);
            break;
     case "Reais":
            currency = new Reais(null);
                break;
    }

    // Do something with the class here
};

Вот классы:
На всякий случай, если вы хотели их увидеть.

// ------------------------
// CLASS - Base Class
function Currency(country, code, imageURL, name) {
    this.country = country;     //EXAMPLE: America
    this.code = code;   //EXAMPLE: USD
    this.imageURL = imageURL;   //EXAMPLE: "http://someplace/mySymbol.gif"
    this.name = name;   //EXAMPLE: Dollar
    this.amount = parseFloat("0.00");   //EXAMPLE: 100
};

// CLASS
function Pound(imageURL) {
    Currency.call(this, "Greate Britain", "GBP", imageURL, "Pound");
};
Pound.prototype = new Currency();
Pound.prototype.constructor = Pound;

// CLASS
function Dollar(imageURL) {
    Currency.call(this, "America", "USD", imageURL, "Dollar");
};
Dollar.prototype = new Currency();
Dollar.prototype.constructor = Dollar;

// CLASS
function Reais(imageURL) {
    Currency.call(this, "Brazil", "BRL", imageURL, "Reais");
};
Reais.prototype = new Currency();
Reais.prototype.constructor = Reais;

UPDATE:
Использование eval() также работает. Как ни странно, я видел, как люди голосовали за это за использование ... хотя, я не знаю почему. Лично мне больше нравится, потому что у вас может не быть ничего от объекта window. Хороший пример тому - некоторые асинхронно загруженные объекты в стиле AMD ... они не зависают window.

ПРИМЕР с использованием eval:

var currency = eval('new Dollar()');

1 Ответ

4 голосов
/ 02 августа 2011

Предполагается, что вашим объектом верхнего уровня является окно (если вы находитесь в браузере):

currency = new window[this.value](null);

Это работает, поскольку все ваши классы являются просто свойствами глобального объекта, а window[property] получает свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...