日期:2014-05-16  浏览次数:20336 次

新手 js 问题 搞了一天一夜了。
我是一个新手,刚学js来着,看一本 深入浅出js 的书之后,就换一种和书上不同的方式来创建对象,搞了一天一夜了,直到现在,都还是没有头绪。请各位大神帮忙。

感激涕零啊

积分实在不多,望见谅。

JScript code

function ges( p ){
        this.pos = p;//container;
    this.currentClass='current';
    this.currentLink = null;
};
    
ges.prototype={
    init:function(){
        if( !document.getElementById || !document.createTextNode ){
            return;            
        }
        
        var navId = document.getElementById( this.pos );
        
        if( !navId ){
            return;
        }
        
        var navLinks = navId.getElementsByTagName( 'a' );
        alert( navLinks.length );    
        for( var i=0; i<navLinks.length-1; i++ ){
            
            if( this.currentLink != null ){
                this.currentLink = navLinks[1];
            }
                DOMHelp.addEvent( navLinks[i], 'click', this.getTarget, false );
        }
        
        if( !this.currentLink ){
            this.currentLink = navLinks[1];
            this.showBg( this.currentLink );
        }
    },

    getTarget:function( e ){
        var tar = DOMHelp.getTarget( e );
        this.showBg( tar );
    },
    
    
    showBg:function( o ){
        DOMHelp.cssjs( 'remove', this.currentLink, ges.currentClass );
        DOMHelp.cssjs( 'add', o, this.currentClass );
        this.currentLink = o;
    }
};




在网页中的代码是:
HTML code

        <script type="text/javascript">
        var n = new ges( 'nav' );
        DOMHelp.addEvent( window, 'load', n.init, false );
    </script>




网页中的 ‘nav’参数形同虚设,没有作用。。
当把js 中的 this.pos 换成 'nav' 却出现 this.showBg is not function.!!!

高手们帮帮忙


------解决方案--------------------
自己学会单步调试
------解决方案--------------------
self = this;
 init:function(){
if( !document.getElementById || !document.createTextNode ){
return;
}

var navId = document.getElementById( this.pos );

if( !navId ){
return;
}

var navLinks = navId.getElementsByTagName( 'a' );
alert( navLinks.length );
for( var i=0; i<navLinks.length-1; i++ ){

if( this.currentLink != null ){
this.currentLink = navLinks[1];
}
DOMHelp.addEvent( navLinks[i], 'click', this.getTarget, false );
}

if( !this.currentLink ){
this.currentLink = navLinks[1];
this.showBg( this.currentLink );
}
},


把init的所有this换成self
------解决方案--------------------
js中的this在不同函数环境中指向不同,在没有任何的函数中的this是全局内容,this会作用域的不同而变化的