Рефакторинг javascript, позволяющий вызывать функции без использования скобок и без использования get - PullRequest
1 голос
/ 28 января 2012

В настоящее время у меня есть следующий код JavaScript (свободно смоделированный после достижения аналогичной цели в should.js):

var example = function() {
    var isFoo, isBar;

    return {

        baz: function(x) {
            if (isFoo) return x + 2;
            else if (isBar) return x - 2;
        },

        get foo () {
            isFoo = true;
            return this;
        },

        get bar () {
            isBar = true;
            return this;
        },
    }
};

Это позволяет мне сделать что-то вроде:

example().foo.baz(2);
// 4

Моя основная задача - разрешить вызовы foo и bar без использования скобок, поскольку они никогда не будут принимать никаких аргументов и делают цепочку вызовов более читабельной. Когда я пропустил этот код через uglify.js, он задохнулся от ключевого слова get, а когда я исследовал, я обнаружил, что использование ключевого слова get не очень хорошая идея (как для производительности, так и для совместимости).

Есть какие-нибудь мысли о том, как я могу реорганизовать этот кусок кода, чтобы я мог продолжать вызывать foo и bar без скобок и не прибегая к использованию ключевого слова get? Я пытался определить foo и bar как свойства, но не мог понять, как заставить его работать.

1 Ответ

2 голосов
/ 28 января 2012

Вы можете использовать __defineGetter__, но это тоже не очень хорошая идея.В Firefox есть несколько новых метапрограммирующих API-интерфейсов, но это невозможно использовать в любом другом браузере.

Базовая линия заключается в том, что если вы хотите, чтобы ваш код запускался в старых браузерах, это сделать невозможно.

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