jquery一个写法的问题

时间:2013.06.28 发布人:yyx_512

jquery一个写法的问题

已解决问题

谷歌yyx_512用户在2013.06.28提交了关于“晶锐jquery一个写法的问题”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-11-01T19:41:59。-------------------------<html>------------------------------
<buttonid="b1">checkhere</button>

<scripttype="text/j**ascript">
$(function(){
$("#b1").click(function(){
***.bd();
});
});
vartemp={
b:$("#b1"),
bd:function(){
vara=this;
a.b.bind("click",***.***t);
},
at:function(){
varc=this;
alert(this.b.attr("id"));
alert(c.b.attr("id"));
//alert(temp.b.attr("id"));
}
}
</script>


这段JS是写在页面中的,有些问题:
1、vartemp={}这种写法是什么意思?jquery的插件不是这样写的,但这也不是方法……
2、方法bd中,不管用this还是用变量a,bd中的绑定效果都可以实现,但是下面的at方法,除了被注释掉的那句有效以外,上面2句alert都会报错的,请问为什么,this在这里指向的东西难道不一样吗?希望大家能够帮助她。

详细问题描述及疑问:-------------------------<html>------------------------------
<buttonid="b1">checkhere</button>

<scripttype="text/j**ascript">
$(function(){
$("#b1").click(function(){
***.bd();
});
});
vartemp={
b:$("#b1"),
bd:function(){
vara=this;
a.b.bind("click",***.***t);
},
at:function(){
varc=this;
alert(this.b.attr("id"));
alert(c.b.attr("id"));
//alert(temp.b.attr("id"));
}
}
</script>


这段JS是写在页面中的,有些问题:
1、vartemp={}这种写法是什么意思?jquery的插件不是这样写的,但这也不是方法……
2、方法bd中,不管用this还是用变量a,bd中的绑定效果都可以实现,但是下面的at方法,除了被注释掉的那句有效以外,上面2句alert都会报错的,请问为什么,this在这里指向的东西难道不一样吗?期待您的答案,你是我的宝贝,你是我的花,谢谢你对我的帮助!

希望以下的回答,能够帮助你。

第1个回答

用户名:Byalis  

1.vartemp={}是定义Object对象,Obje集业缺从ct包含很多键衷。这里面的b,bd,督给at都是键,对应了三个值,这个值可以是函数。这是j**ascript的语言特性,如果你看jquery的源代码的话,会发现其中很多地方都是用这个实现的。包括JSON对象,实质上也是Object。

2.关键一点就是bu问答tton在执行你为它绑定的函数的时候,this指的是自己。
第一次点击的时候你用的是***.bd(),那么就通过temp这个对象调用bd函数,中间有temp这个中间层速触犯道运德沿,那么bd函数的this指的是temp,点击完了以后你将b1绑定了***.***t这个函来威名燃浓状钟数,注意,你直接把这个函数绑到了button脚执写听始抗逐指的click事件上,下回它调用的时候会直接用这个函数,而不是类似于第一次的***.at(),那么这时候没有门溶实较九旧temp这个中间层,这里的this指的的button这个对象(不是jquery对象,而是butto这个dom对象)息细苏复斤弦杆话,它没有b这个属性,所以就报错了。

P.S.这里有个写法,你替换掉就会发现那两个方法又有效了
bd:function(){
vara=this;
a.b.bind("click",function(){
***.***t.call(temp);
});
},
这里用了call这个j**ascript的语言特性,把at这个函数运行时的this指针强制设为temp,就没有问题了。