我想在利用HTML5的畫布標籤的JavaScript中構建一個項目。但是,由於在我的對象/原型中引用了範圍,我遇到了一些問題。將canvas設爲JavaScript中的全局對象是否是一種好的做法?
只是讓畫布元素(儘管它們中的很多恰好是)是全局的,這是一個好主意(或者說,是一種很好的做法)嗎?我一直試圖儘可能地避免製作全局變量,因爲想要堅持OOP思路,但我沒有找到更好的解決方案來解決這個問題。
任何反饋意見。
我想在利用HTML5的畫布標籤的JavaScript中構建一個項目。但是,由於在我的對象/原型中引用了範圍,我遇到了一些問題。將canvas設爲JavaScript中的全局對象是否是一種好的做法?
只是讓畫布元素(儘管它們中的很多恰好是)是全局的,這是一個好主意(或者說,是一種很好的做法)嗎?我一直試圖儘可能地避免製作全局變量,因爲想要堅持OOP思路,但我沒有找到更好的解決方案來解決這個問題。
任何反饋意見。
您的主要問題似乎是將信息傳遞到事件(不接收參數的函數)。
解決方法是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);
您可以通過說這個比較複雜,傳遞「畫布管理」對象,而不是允許在運行時更改畫布,以及添加您可能需要的其他變量...
它實際上是從來沒有一個好主意,用變量/引用來打開全局對象。幾乎在所有情況下都可以避免。
你提到你正在遵循一個使得它更糟的「OOP心態」。在這種情況下,你顯然在你的設計理念中做了一些非常錯誤的事情。回到繪圖板!
正如我多次提到的,儘量避免這種情況是創建一個Function context
,它表示代碼的範圍。
(function() {
// all of your code
var canvas = document.getElementById('mycanvas');
}());
?不,我認爲這不是好的做法;實際上它甚至沒有意義。對畫布對象的引用是否在全局變量中對畫布的工作方式沒有影響。 – Pointy 2011-02-08 20:14:28