将canvas作为JavaScript中的全局对象是一种好习惯吗?

时间:2011-02-08 20:07:35

标签: javascript oop html5 prototype canvas

我正在尝试使用HTML5的canvas标记在JavaScript中构建一个项目。但是,由于在我的对象/原型中引用了作用域,我遇到了一些问题。

只是让canvas元素(不管它们中有许多碰巧都是全局的)是一个好主意(或者更确切地说是好的做法)吗?由于想要坚持OOP心态,我一直试图尽可能避免制作全局变量,但我找不到更好的解决方案来解决这个问题。

感谢任何反馈。

2 个答案:

答案 0 :(得分:4)

实际上从不一个好主意用变量/引用来破坏全局对象。几乎在所有情况下都可以避免。

你提到你正在遵循“OOP心态”,这会让情况变得更糟。在这种情况下,您显然在设计概念中做了一些非常错误的事情。回到绘图板!

正如我多次提到的,避免这种情况的最小努力是创建Function context,代表代码的范围。

(function() {
    // all of your code
    var canvas = document.getElementById('mycanvas');
}());

答案 1 :(得分:2)

您的主要问题似乎是将信息传递给事件(不接收参数的函数)。

对此的解决方案是closures。函数可以使用其范围中定义的任何变量,您可以利用它来发挥作用。

function make_event_handler(canvas){
    function my_event_handler(){
        alert('look, I can use '+canvas);
    }
    return my_event_handler;
}

elem.onclick = make_event_handler(canvas);

你可以通过传递一个“画布管理器”对象来改变画布,以允许在运行时更改画布以及添加你可能需要的其他变量......