正确使用JS库中的函数

时间:2014-08-19 19:04:25

标签: javascript html5 function object scope

现在我正在尝试构建一个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对象)的新手,我仍然不确定在开发库时使用的最佳方法和语法。我最担心的是它在内部,客户端的机器和浏览器中都很轻。在任何一种情况下,我都不明白为什么我不能创建一个新方法(即:byte2Hex())并通过父对象实例化它。任何批评肯定会受到赞赏。

1 个答案:

答案 0 :(得分: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/