Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使画布成为全局对象是否是一种好的做法?_Javascript_Oop_Html_Prototype_Canvas - Fatal编程技术网

在JavaScript中使画布成为全局对象是否是一种好的做法?

在JavaScript中使画布成为全局对象是否是一种好的做法?,javascript,oop,html,prototype,canvas,Javascript,Oop,Html,Prototype,Canvas,我正在尝试用JavaScript构建一个利用HTML5的canvas标记的项目。然而,由于在对象/原型中引用作用域,我遇到了一些问题 将canvas元素(不管其中有多少元素)全局化是一个好主意(或者更确切地说是一个好实践)吗?我一直试图尽可能避免使用全局变量,因为我想坚持OOP思维,但我没有找到很多更好的解决方案 欢迎任何反馈。用变量/引用来撞击全局对象实际上从来都不是一个好主意。这在几乎所有情况下都是可以避免的 你提到你遵循的是一种“面向对象的思维”,这让事情变得更糟。在这种情况下,您显然在设

我正在尝试用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对象传递给需要它的方法