2012-01-06 60 views
0

其他人在Firefox 9中看到奇怪的JavaScript問題?我們有兩個問題。Firefox 9中的JavaScript問題9

第一種情況是,instanceof運算符在返回true時返回false。當我使用Firebug進行檢查時,這個變量絕對是我期望的,但它返回false。但是,如果我在代碼中添加了其他斷點,那麼它將返回true。除了添加更多斷點,我無能爲力,它將開始工作。

在另一個實例中,我們創建了一個變量作用域,然後在全局訪問該函數。像這樣的東西(注意,我們使用的是YUI 2創建一個全局命名空間):

YAHOO.namespace("MyNS"); 

(function() { 
    var _panel; 

    YAHOO.MyNS.showPanel = function() { 
    if (!_panel) { 
     // code to create _panel 
     _panel = new YAHOO.widget.Panel(...); 
    } 
    _panel.show(); 
    }; 

    YAHOO.MyNS.hidePanel = function() { 
    if (_panel && _panel !== null && _panel.cfg.getProperty("visible")) { 
     _panel.hide(); 
    } 
    }; 
})(); 

在我的個人網頁,YAHOO.MyNS.showPanel()工作正常,但後來當我再打YAHOO.MyNS。 hidePanel(),因爲_panel未定義而失敗。如果我在showPanel()和hidePanel()方法中都在螢火蟲中放置斷點,則_panel不是未定義的。

我們很難過。因爲這是一項新功能,所以我嘗試關閉Firefox中的類型推斷功能,以查看是否有所作爲,但沒有。

+0

注意:if(_panel && _panel!== null ...)是多餘的...... null是虛假的。如果(_panel && _panel.cfg && _panel.cfg.getProperty && ...更合適 – Tracker1 2012-01-06 18:30:07

回答

0

我已經使用YUI很長時間了,更別提YUI2了,但我不知道這是否是FireFox 9的特定問題,並且它可能不是FireFox 9的一個bug。

創建一個Panel對象,並使用自身的內部引用和一組showhide方法創建Panel對象,然後將其附加到名稱空間 - 至少您不必擔心問題是範圍你的關閉。

+0

注意:不是YAHOO.widget.Panel,只是一個叫Panel的對象 – 2012-01-06 17:29:45

0

您不能盲目信任console.log,因爲它可能會在您發出呼叫後的一段時間顯示對象。谷歌瀏覽器也受此影響。您可能只在Firefox 9中注意到它,因爲JavaScript引擎速度更快。

雖然這並不能解決你的錯誤,但它可能會解釋怪異的行爲。

我建議你讓你的支票更加明確。初始化_panelnullfalse並檢查。如果new YAHOO.widget.Panel(...)也可以返回除Panel以外的對象。

乍一看你的代碼看起來很好,也許你從摘錄中刪除了這個bug?

+0

我可以做這些明確的檢查,但我不會新的YAHOO.Widget.Panel將永遠返回一個面板,這個代碼自FF 3.5以來一直保持不變,我只是想包含代碼,因爲我不希望第一個註釋是「包含代碼樣品請「。 – erikaho 2012-01-06 19:09:34