在JavaScript中使画布成为全局对象是否是一种好的做法?
我正在尝试用JavaScript构建一个利用HTML5的canvas标记的项目。然而,由于在对象/原型中引用作用域,我遇到了一些问题 将canvas元素(不管其中有多少元素)全局化是一个好主意(或者更确切地说是一个好实践)吗?我一直试图尽可能避免使用全局变量,因为我想坚持OOP思维,但我没有找到很多更好的解决方案在JavaScript中使画布成为全局对象是否是一种好的做法?,javascript,oop,html,prototype,canvas,Javascript,Oop,Html,Prototype,Canvas,我正在尝试用JavaScript构建一个利用HTML5的canvas标记的项目。然而,由于在对象/原型中引用作用域,我遇到了一些问题 将canvas元素(不管其中有多少元素)全局化是一个好主意(或者更确切地说是一个好实践)吗?我一直试图尽可能避免使用全局变量,因为我想坚持OOP思维,但我没有找到很多更好的解决方案 欢迎任何反馈。用变量/引用来撞击全局对象实际上从来都不是一个好主意。这在几乎所有情况下都是可以避免的 你提到你遵循的是一种“面向对象的思维”,这让事情变得更糟。在这种情况下,您显然在设
欢迎任何反馈。用变量/引用来撞击全局对象实际上从来都不是一个好主意。这在几乎所有情况下都是可以避免的 你提到你遵循的是一种“面向对象的思维”,这让事情变得更糟。在这种情况下,您显然在设计概念中犯了一些非常错误的错误。回到绘图板上 正如我多次提到的,避免这种情况的最小努力是创建一个
函数上下文
,它表示代码的作用域
(function() {
// all of your code
var canvas = document.getElementById('mycanvas');
}());
实际上,用变量/引用来填充全局对象从来都不是一个好主意。这在几乎所有情况下都是可以避免的 你提到你遵循的是一种“面向对象的思维”,这让事情变得更糟。在这种情况下,您显然在设计概念中犯了一些非常错误的错误。回到绘图板上 正如我多次提到的,避免这种情况的最小努力是创建一个
函数上下文
,它表示代码的作用域
(function() {
// all of your code
var canvas = document.getElementById('mycanvas');
}());
您的主要问题似乎是将信息传递到事件(不接收参数的函数)中 解决办法是。函数可以使用在其作用域中定义的任何变量,您可以利用这些变量
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);
您可以通过传递一个“画布管理器”对象,而不是允许在运行时更改画布,以及添加您可能需要的其他变量,使这一点更加复杂。您的主要问题似乎是将信息传递到事件中(不接收参数的函数) 解决办法是。函数可以使用在其作用域中定义的任何变量,您可以利用这些变量
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);
您可以通过传递一个“canvas manager”对象,而不是允许在运行时更改画布,以及添加您可能需要的其他变量,使这一点更加复杂…??不,我不认为这是好的做法;事实上,这根本没有意义。对画布对象的引用是否在全局变量中对画布的工作方式没有影响。我的意思是(作为一个示例):假设每次移动鼠标时我都要更改画布上的文本(对于x和y坐标值)。必须在中的函数可能无法引用canvas元素的其他方法来重新绘制画布上的其他内容。如果不提供实际的脚本,就有点难以解释,不幸的是,我现在没有太多时间来做。clicheName,您可以将cavas对象传递给需要它的方法??不,我不认为这是好的做法;事实上,这根本没有意义。对画布对象的引用是否在全局变量中对画布的工作方式没有影响。我的意思是(作为一个示例):假设每次移动鼠标时我都要更改画布上的文本(对于x和y坐标值)。必须在中的函数可能无法引用canvas元素的其他方法来重新绘制画布上的其他内容。如果不提供实际的脚本,就有点难以解释,不幸的是,我现在没有太多时间来做。clicheName,您可以将cavas对象传递给需要它的方法