js中,元素对象的一个方法绑定了一个事件函数fn,但fn中的this指针却是window,其他浏览器正常,如何解决

原因:想写个自己的库,没按jquery中为function添加原型的方法的思路,而是想通过为HTML对象添加内置方法来实现。眼见通过了,再到ie测试,各个版本的都是thi... 原因:想写个自己的库,没按jquery中为function添加原型的方法的思路,而是想通过为HTML对象添加内置方法来实现。眼见通过了,再到ie测试,各个版本的都是this是window
html:有<button id="btn">btn</button>
js:
function myadd(obj,oevt,fn){
if(obj.attachEvent)
return obj.attachEvent('on'+oevt,fn);
else
return obj.addEventListener(oevt,fn,false);
}

function people(id,fn){
var op = document.getElementById(id);
var of = this;
//对象方法
of.click= function(fn){
myadd(op,'click',fn);
}

}
function test(){
alert(this);//IE中是window;其他浏览器正常
}
function $(id,fn){
return new people(id,fn);
}
var p1=new people('btn');
p1.click(test);
展开
 我来答
提着菜刀的兔子2fe216
2014-04-22 · TA获得超过129个赞
知道答主
回答量:140
采纳率:0%
帮助的人:20.3万
展开全部
function test(obj){
alert(obj);
}
试一下
追问
事件绑定函数:myadd(obj,oevt,fn);不好传参。问题在于:绑定fn时,fn内的this指针IE中是window,其他浏览器是obj。当然了,平常的绑定都没问题,但IE在给元素对象的方法中绑定就出现了这个问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式