我是一个新手,刚学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会作用域的不同而变化的