2011-02-08 47 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'); 
}()); 
相關問題