Firefox 9中的JavaScript问题

时间:2012-01-06 17:20:12

标签: javascript yui firefox-9

其他人在Firefox 9中看到奇怪的JavaScript问题?我们有两个问题。

第一种情况是当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()方法中的firebug中放置一个断点,那么_panel不是未定义的。

我们很难过。因为它是一个新功能,我尝试关闭firefox中的类型推断功能,看看是否有所作为,但事实并非如此。

2 个答案:

答案 0 :(得分:0)

自从我使用YUI以来已经很长时间了,更不用说YUI2,但我不知道这是否是FireFox 9特有的问题,如果它可能不是FireFox 9的错误。

使用对自身的内部引用和一组Panelshow方法创建hide对象,然后将其附加到命名空间会更加清晰 - 至少你不必担心问题是关闭的范围。

答案 1 :(得分:0)

您不能盲目信任console.log,因为它可能会在您发出呼叫后的某个时间向您显示该对象。谷歌Chrome也受此影响。您可能只会在Firefox 9中注意到它,因为JavaScript引擎更快。

但这并不能解决你的错误,但它可能解释了这种奇怪的行为。

我建议你更明确地检查一下。将_panel初始化为nullfalse并检查。如果new YAHOO.widget.Panel(...)可以返回Panel对象以外的其他内容,则也会检查该内容。

乍一看,您的代码看起来很好,也许您从摘录中删除了错误?