问题是:当第一次调用switchTo(在a点)时设置了上下文变量 _curIndex :
function ShowSwitcherObject( id, switchIds )
{
this._id = id;
this._isInited = false;
this.isInited = function()
{
return this._isInited;
};
this._visible = false;
this.show = function()
{
if( this._visible == false )
{
$( '#' + this._id ).show();
this._visible = true;
this._isInited = true;
}
};
this._showSwitch = function()
{
$( '#' + this._switchIds[ this._curIndex ] ).show();
};
this._hideSwitch = function()
{
$( '#' + this._switchIds[ this._curIndex ] ).hide();
};
this.switchTo = function( index )
{
if( index != this._curIndex ) // point a
{
if( this._curIndex != null )
{
this._hideSwitch();
}
this._curIndex = index; // point b
this._showSwitch();
}
};
this._switchIds = switchIds;
return this;
}
有趣的是,如果我们评论 point b ,那么变量在a点是 null 。 没有外部的 _curIndex 集。它只能由 switchTo 设置。是firefox bug还是别的什么?
答案 0 :(得分:2)
Javascript中未初始化的变量的值为undefined
,而不是null
。
this.switchTo = function( index )
{
alert(this._curIndex === undefined);
// ...
};
上述内容确实在第一次调用时提醒true
仅 - 这意味着_curIndex
应该在此处表现。
另请注意:
alert(undefined != null); // returns false
alert(undefined !== null); // returns true
答案 1 :(得分:1)
从您的代码看,this._curIndex
在{a>}点undefined
。{/ p>
如果您需要this._curIndex
为null,则必须自己将其设置为null,因为Javascript解释器不会将未初始化的变量解析为null
,而是undefined
。
请改为尝试:
this.switchTo = function( index )
{
if( index != this._curIndex ) // point a
{
if( typeof(this._curIndex) != 'undefined' )
{
this._hideSwitch();
}
this._curIndex = index; // point b
this._showSwitch();
}
};