Как аннотировать использование «this» в компиляторе Closure в следующей функции Javascript? - PullRequest
3 голосов
/ 21 ноября 2011

Я использую следующую функцию для изменения поведения конкретного экземпляра массива Javascript.Как я могу аннотировать код для Closure Compiler?http://code.google.com/closure/compiler/docs/js-for-compiler.html При выполнении кода через компилятор выдается ошибка «JSC_USED_GLOBAL_THIS».

function listify(array) {
    array.toString = function() {
        return '[' + this.join(', ') + ']';
    };
    return array;
};

Не похоже, что я могу использовать аннотацию @extends или @constructor.

Я не хочу изменять глобальный прототип Array, поскольку это может привести к непреднамеренным побочным эффектам при использовании другого кода на странице.Кроме того, после прочтения http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/ я думаю, что мой подход является лучшим для моего варианта использования.Проблема в том, что я просто не знаю, как аннотировать это компилятору

1 Ответ

3 голосов
/ 22 ноября 2011
function listify(array) {

    /**
     * Returns the roster widget element.
     * @this {Array}
     * @return {String}
     */
    array.toString = function() {
        return '[' + this.join(', ') + ']';
    };
    return array;
};
...