其他人在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中的类型推断功能,看看是否有所作为,但事实并非如此。
答案 0 :(得分:0)
自从我使用YUI以来已经很长时间了,更不用说YUI2,但我不知道这是否是FireFox 9特有的问题,如果它可能不是FireFox 9的错误。
使用对自身的内部引用和一组Panel
和show
方法创建hide
对象,然后将其附加到命名空间会更加清晰 - 至少你不必担心问题是关闭的范围。
答案 1 :(得分:0)
您不能盲目信任console.log
,因为它可能会在您发出呼叫后的某个时间向您显示该对象。谷歌Chrome也受此影响。您可能只会在Firefox 9中注意到它,因为JavaScript引擎更快。
但这并不能解决你的错误,但它可能解释了这种奇怪的行为。
我建议你更明确地检查一下。将_panel
初始化为null
或false
并检查。如果new YAHOO.widget.Panel(...)
可以返回Panel
对象以外的其他内容,则也会检查该内容。
乍一看,您的代码看起来很好,也许您从摘录中删除了错误?