1. 之前寫的一直都是分散的函數(shù),用到什么功能,就寫什么函數(shù),覺得不夠整潔,所以這次寫的是封裝的類,用起來還不錯,但是傳遞參數(shù)的時候遇到了不少問題,所以,查閱了很多資料,總結(jié)如下:
1)動態(tài)綁定事件問題:
需要將onclick事件綁定到對象上,比如列表項。需要用到addEventListener或者attachEvent,用于吧函數(shù)操作添加到事件中去,而不是覆蓋,但是,attachEvent不支持FF,F(xiàn)F只能用addEventListener。so,就需要一個函數(shù),把它們倆給綜合起來,于是乎,這個函數(shù)誕生了:
function addEventHandler(oTarget, sEventType, fnHandler)
{
if(oTarget.addEventListener)
{oTarget.addEventListener(sEventType, fnHandler, false);}
else if(oTarget.attachEvent)
{oTarget.attachEvent('on' + sEventType, fnHandler);}
else{oTarget['on' + sEventType] = fnHandler;}
}
2)傳遞this參數(shù)問題:
由于我吧函數(shù)和屬性都封裝到了一個類里面,所以在綁定onclick之類的事件是,就會產(chǎn)生一個問題,比如,addEventHandler(this.elems[i],"click",this.Move);,這樣就出錯了,因為在onclick事件發(fā)生的時候,調(diào)用的this就不是指向這個封裝的類了,于是乎,就需要用到apply()了~——應(yīng)用某一對象的一個方法,用另一個對象替換當(dāng)前對象。具體格式我就不用說了,網(wǎng)上一大堆~函數(shù):
var Bind = function(object,func){
var args = Array.prototype.slice.call(arguments).slice(2);
return function(){
return func.apply(object,args);
}
}
調(diào)用:
this._fnMove=Bind(this,this.move,i);//this.move是我定義的一個成員函數(shù),封裝在類中
//this.elems[i].onclick=this._fnMove;//吧上面那句話換成這句話也是可以的,只不過,onclick事件就被替換為this._fnMove,而不是添加this._fnMove進去
addEventHandler(this.elems[i],"click",this._fnMove);
這樣就OK了~
PS.call()也是基本相同的功能,但具體參數(shù)不一樣