我正在尝试使用HTML5的canvas标记在JavaScript中构建一个项目。但是,由于在我的对象/原型中引用了作用域,我遇到了一些问题。
只是让canvas元素(不管它们中有许多碰巧都是全局的)是一个好主意(或者更确切地说是好的做法)吗?由于想要坚持OOP心态,我一直试图尽可能避免制作全局变量,但我找不到更好的解决方案来解决这个问题。
感谢任何反馈。
答案 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);
你可以通过传递一个“画布管理器”对象来改变画布,以允许在运行时更改画布以及添加你可能需要的其他变量......