JavaScript学习笔记09.11.28

已经当菜鸟一个月了,这两天终于写出了一个个人认为真正意义上的作业了,不过,最大感受就是。。。IE太垃圾了。。。垃圾的我想上吊,so,这个作业实际上也没有完成的很完美,因为,在IE上还是有兼容性的问题存在,不错,就此先自我总结一下吧~免得以后又忘了~

1. 之前写的一直都是分散的函数,用到什么功能,就写什么函数,觉得不够整洁,所以这次写的是封装的类,用起来还不错,但是传递参数的时候遇到了不少问题,所以,查阅了很多资料,总结如下:

1)动态绑定事件问题:

需要将onclick事件绑定到对象上,比如列表项。需要用到addEventListener或者attachEvent,用于吧函数操作添加到事件中去,而不是覆盖,但是,attachEvent不支持FF,FF只能用addEventListener。so,就需要一个函数,把它们俩给综合起来,于是乎,这个函数诞生了:

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参数问题:

由于我吧函数和属性都封装到了一个类里面,所以在绑定onclick之类的事件是,就会产生一个问题,比如,addEventHandler(this.elems[i],"click",this.Move);,这样就出错了,因为在onclick事件发生的时候,调用的this就不是指向这个封装的类了,于是乎,就需要用到apply()了~——应用某一对象的一个方法,用另一个对象替换当前对象。具体格式我就不用说了,网上一大堆~函数:

var Bind = function(object,func){

var args = Array.prototype.slice.call(arguments).slice(2);

return function(){

return func.apply(object,args);

}

调用:

this._fnMove=Bind(this,this.move,i);//this.move是我定义的一个成员函数,封装在类中

//this.elems[i].οnclick=this._fnMove;//吧上面那句话换成这句话也是可以的,只不过,onclick事件就被替换为this._fnMove,而不是添加this._fnMove进去

addEventHandler(this.elems[i],"click",this._fnMove); 

这样就OK了~

PS.call()也是基本相同的功能,但具体参数不一样 

貌似篇幅有点长了,另起一篇,继续~ 

 

 

转载于:https://www.cnblogs.com/BlackCaffeine/archive/2009/11/28/1612544.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值