javascript - 如何使用模块化 JavaScript 模式创建单独的对象

标签 javascript jquery html canvas

我正在尝试更新间隔值 x 但没有成功。我希望最终拥有不同的 pawn 对象,其内部值可以在按上/下/左/右按键重绘 Canvas 时进行更新。

代码更新:现在能够更新 x、y 值,但不确定是否使用模块化 JavaScript 模式创建单独的对象。

使用 jQuery 1.5.1 的 JavaScript:

//Constructors
    var pawn = (function() {        

        var x = 25;
        var y = 25;     
        var getX = function() {
            return x;
        };
        var getY = function() {
            return y;
        };

        function _drawPawn(x,y) {
            var x = x || 25;
            var y = y || 25;
            var canvas = document.getElementById("canvas");
            if (canvas.getContext) {
                var b = $('body');
                var winH = b.height();
                var winW = b.width();
                $(canvas).attr('height',winH).attr('width',winW);
                var ctx = canvas.getContext("2d");  
                ctx.beginPath();
                ctx.lineWidth="3";
                ctx.arc(x, y, 10, 0, Math.PI * 2, true); // circle              
                ctx.stroke();
            }
        }

        function left() {
            x = 100;
            y = 100;
        }

        return {
            getX:getX,
            getY:getY,
            draw: function drawPawn(x,y) {
                _drawPawn(x,y);
            },
            left:left
        }
    })();   

    //Init
    $(function() {      
        var b = pawn;
        b.left();
        alert(b.getX());

            var a = pawn;
    alert(a.getX());

        //b.draw();
    });

和 html:

<canvas id="canvas" height="800px" width="600px">
    Download a modern browser like Internet Explorer 9, Firefox, Safari or Chome to view this.
</canvas>

最佳答案

按照目前的编写方式,您的 getX() 函数将使用提供的(空)参数列表自动调用,并返回 x,这相当于:

var getX = x;

它将在声明时为 getX 提供 x 的值

要修复,请删除括号:

var getX = function() {
        return x;
};
<小时/>

您还需要在返回的对象中修复此函数:

draw: function drawPawn(x, y) {
    _drawPawn(x, y);
}

因为明显的意图是调用draw不带参数并使用当前绑定(bind)的xy值,应该是:

draw: function drawPawn() {
    _drawPawn(x, y);
}

关于javascript - 如何使用模块化 JavaScript 模式创建单独的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377850/

相关文章:

javascript - 使用 jquery 展开/折叠常见问题解答

javascript - 提交按钮在表单和 PHP 中不起作用

javascript - 从 WPF 中的 Web 浏览器调用 HTML 页面中存在的 JavaScript 函数

jquery - 如何将其编写为函数

javascript - 单击另一个时获取同级 div 的内容

javascript - 雷达扫描仪旋转效果

html - 非语义网格。为什么最后一个 div 被移到了其他 div 的下面?

css - 导航菜单(带有子菜单树)在 IE 6、IE7、IE8 中中断

javascript - 我如何编写一个 CouchDB View 来列出每个存储文档的大小?

javascript - 解决 jQuery-ui 日期范围错误?