2011-02-08 62 views
0

我想在利用HTML5的画布标签的JavaScript中构建一个项目。但是,由于在我的对象/原型中引用了范围,我遇到了一些问题。将canvas设为JavaScript中的全局对象是否是一种好的做法?

只是让画布元素(尽管它们中的很多恰好是)是全局的,这是一个好主意(或者说,是一种很好的做法)吗?我一直试图尽可能地避免制作全局变量,因为想要坚持OOP思路,但我没有找到更好的解决方案来解决这个问题。

任何反馈意见。

+0

?不,我认为这不是好的做法;实际上它甚至没有意义。对画布对象的引用是否在全局变量中对画布的工作方式没有影响。 – Pointy 2011-02-08 20:14:28

回答

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); 

您可以通过说这个比较复杂,传递“画布管理”对象,而不是允许在运行时更改画布,以及添加您可能需要的其他变量...

4

它实际上是从来没有一个好主意,用变量/引用来打开全局对象。几乎在所有情况下都可以避免。

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

正如我多次提到的,尽量避免这种情况是创建一个Function context,它表示代码的范围。

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