Правильное использование функций в библиотеке JS

Прямо сейчас я пытаюсь создать библиотеку JavaScript, хотя она очень ювенильна, и я уверен, что ее можно переработать, чтобы она работала лучше. Однако в настоящее время я храню некоторые из моих наиболее распространенных функций, которые я обычно использую (при рендеринге анимации HTML5 Canvas), и у меня есть вышеупомянутые функции JavaScript, хранящиеся в их собственном плоском файле с именем canvasLab.js. Моя текущая структура такова:

var canvasLab = {

     setCanvas: function(elem) {
        if (elem == undefined) {
            return Modernizr.canvas;
        }
        return document.getElementById(elem);
    },

    set2D: function(elem) {
        return elem.getContext('2d');
    },

... и все работает нормально, пока я не попытаюсь объявить функцию в другой функции:

    getColorGradient: function(freqR,freqG,freqB,phaseA,phaseB,phaseC,center,width,length) {
        if (center  == undefined) center = 128;
        if (width == undefined) width = 127;
        if (length  == undefined) length = 50;
        colorArray=[];
        frequency = 0.3;
        amplitude = 127;
        center = 128;
        byte2Hex: function(n) {
        nybHexString = '0123456789ABCDEF';
        return String( nybHexString.substr( ( n >> 4 ) & 0x0F, 1 ) ) + nybHexString.substr(n & 0x0F, 1);
        },
        getRgb: function(r,g,b) {
        return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
        },
        getGradientArray: function() {

            for (var i=0; i<length; ++i) {

                red = Math.sin(freqR * i + phaseA) * width + center;
                green = Math.sin(freqG * i + phaseB) * width + center;
                blue = Math.sin(freqB * i + phaseC) * width + center;

                result = getRgb(red,green,blue);
                this.colorArray[i] = result;
            }

     }

}

когда я получаю сообщение об ошибке "неожиданный токен" (строка 45:

 byte2Hex: function(n) {

Я в некотором роде новичок в создании библиотек JavaScript (или Lib Objects), и я до сих пор не уверен в том, какие методы и синтаксис лучше использовать при разработке библиотеки. Больше всего меня беспокоит то, что он легкий внутри, на компьютере клиента и в браузере. В любом случае я не понимаю, почему я не могу создать новый метод (например, byte2Hex()) и создать его экземпляр через родительский объект. Любая критика, безусловно, будет оценена.

1 ответ

Решение

Вы определяете свою функцию так, как если бы она находилась в области видимости объекта

byte2Hex: function(n)

Эта строка должна сказать

byte2Hex =  function(n)....

Эти две функции ниже также имеют ту же проблему

Если вы хотите вернуть их как методы, они должны быть обернуты в объект.

 return {
        getRgb: function(r,g,b) {
            return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
        },
        getGradientArray: function() {//...
        }
        };

У вас также есть тонна ссылок, которые не ограничены областью применения оператора var.

Чтобы помочь вам найти, отследите эти типы ошибок, попробуйте вставить ваш код в:

http://www.jshint.com/

Другие вопросы по тегам