我是一个新手,刚学js来着,看一本 深入浅出js 的书之后,就换一种和书上不同的方式来创建对象,搞了一天一夜了,直到现在,都还是没有头绪。请各位大神帮忙。感激涕零啊积分实在不多,望见谅。
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;
}
};在网页中的代码是:        <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.!!!高手们帮帮忙

解决方案 »

  1.   

    看你的domhelp里面是怎么样了javascript 的 this引用是会变的function x(f)
    {
        f()
    }
    x(n.init)这样init里面的this指的明显不是n自己了
      

  2.   

    那要如何去变呢才能保证,this引用不变?还有为什么 创建一个新的对象不能得到 传递进去的参数?
    DOMHelp={
            addEvent: function(elm, evType, fn, useCapture){
    if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
    } else if (elm.attachEvent) {
    var r = elm.attachEvent('on' + evType, fn);
    return r;
    } else {
    elm['on' + evType] = fn;
    }
    },

      

  3.   

    是的,this引用变了,那要如何 才能使得它不被改变呢?
      

  4.   

     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
      

  5.   

    再请教一个问题,类中的成员方法不用this,有没有其它的方法可以 调用?
      

  6.   

    将 self 设为 this,似乎也不起作用。
      

  7.   

    js中的this在不同函数环境中指向不同,在没有任何的函数中的this是全局内容,this会作用域的不同而变化的