js怎样获取调用回调函数的参数值

js怎样获取调用回调函数的参数值,第1张

代码如下:
function a(callback){
alert('a');
callbackcall(this);//或者是 callback(), callbackapply(this),看个人喜好
}
function b(){
alert('b');
}
//调用
a(b);
这样的结果是先d出 'a',再d出‘b'。这样估计会有人问了“写这样的代码有什么意思呢?好像没太大的作用呢!”
是的,其实我也觉得这样写没啥意思,“如果调用一个函数就直接在函数里面调用它不就行了”。我这只是给大家写个小例子,做初步的理解。真正写代码的过程中很少用这样无参数的,因为在大部分场景中,我们要传递参数。来个带参数的:
复制代码 代码如下:
function c(callback){
alert('c');
callbackcall(this,'d');
}
//调用
c(function(e){
alert(e);
});
这个调用看起来是不是似曾相识,这里e参数被赋值为'd',我们只是简单的赋值为字符窜,其实也可以赋值为对象。Jquery里面是不是也有个e参数,下面我们就来讲讲
Jquery里面的e参数是如何被回调赋值的。
Jquery框架我想大家不陌生了,出来了好久,开发的时候都在用,比较简单,api网上搜起来很方便,上手快。在Jquery框架下,我们有时候要获取事件中的一些参数,比如我要获取当前点击的坐标,点击的元素对象。这个需求在Jquery里面好办 :
复制代码 代码如下:
$("#id")bind('click',function(e){
//epageX ,epageY ,etarget各种数据
});
用起来倒是挺方便,其实这个e参数的赋值也是通过回调函数来实现的,这个参数是用回调参数给它赋予了一个对象值,仔细研究过JJquery源码的朋友应该发现了这一点。
还有Ajax里面 $get('',{},function(data){}) data这个参数也是同样的原理。
我们来看看Jquery事件对象里面是怎么应用回调函数的。
为了方便,我简单的写了一下$相关的一些实现,之前写过“小谈Jquery”里面有比较接近框架实现的方法,我下面只是写一个简易的选择器。
复制代码 代码如下:
<div id="container" style="width:200px;height:200px;background-Color:green;">
< /div>
< script>
var _$=function (id)
{
thiselement= documentgetElementById(id);
}
_$prototype={
bind:function(evt,callback)
{
var that=this;
if(documentaddEventListener)
{
thiselementaddEventListener(evt, function(e){
callbackcall(this,thatstandadize(e));
} ,false);
}
else if(documentattachEvent)
{
thiselementattachEvent('on'+evt,function(e){
callbackcall(this,thatstandadize(e));
});
}
else
thiselement['on'+evt]=function(e){
callbackcall(this,thatstandadize(e));
};
},
standadize:function(e){
var evt=e||windowevent;
var pageX,pageY,layerX,layerY;
//pageX 横坐标 pageY纵坐标 layerX点击处位于元素的横坐标 layerY点击处位于元素的纵坐标
if(evtpageX)
{
pageX=evtpageX;
pageY=evtpageY;
}
else
{
pageX=documentbodyscrollLeft+evtclientX-documentbodyclientLeft;
pageY=documentbodyscrollTop+evtclientY-documentbodyclientLTop;
}
if(evtlayerX)
{
layerX=evtlayerX;
layerY=evtlayerY;
}
else
{
layerX=evtoffsetX;
layerXY=evtoffsetY;
}
return {
pageX:pageX,
pageY:pageY,
layerX:layerX,
layerY:layerY
}
}
}
window$=function(id)
{
return new _$(id);
}
$('container')bind('click',function(e){
alert(epageX);
});
$('container1')bind('click',function(e){
alert(epageX);
});
< /script>
这段代码我们主要看standadize函数的实现,兼容性的代码,就不多说了,返回的是一个对象
复制代码 代码如下:
return {
pageX:pageX,
pageY:pageY,
layerX:layerX,
layerY:layerY
}
然后再看bind函数里面的代码 callbackcall(this,thatstandadize(e)),这段代码其实就是给e参数赋值了,是用callback回调实现的。
callback 函数被调用的时候传入的是匿名函数
复制代码 代码如下:
function(e){
}
而callbackcall(this,thatstandadize(e))相当于是执行了这么一段代码
复制代码 代码如下:
(function(e){
})(standadize(e))
这也是Jquery用回调函数比较经典的地方,e参数就是这么被赋值的,说了这些你们也大概有个了解了,以及怎么使用了。
回调在各种框架中应用的比较多,有时候自己写一些东西的时候也可以根据实际情况用用看。

function getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&])(&|$)", "i");
    var r = windowlocationsearchsubstr(1)match(reg);
    if (r != null) return (r[2]); return null;
}

要获取url传过来的参数,直接调用GetQuryString即可。这个方法一般放在通用方法里里面。

不太明白用JS获取参数的目的,也许Ajax中能用到吧
<script language = javascript>
function request(paras){
var url = locationhref;
var paraString = urlsubstring(urlindexOf("")+1,urllength)split("&");
var paraObj = {}
for (i=0; j=paraString[i]; i++){
paraObj[jsubstring(0,jindexOf("="))toLowerCase()] = jsubstring(jindexOf("=")+1,jlength);
}
var returnValue = paraObj[parastoLowerCase()];
if(typeof(returnValue)=="undefined"){
return "";
}else{
return returnValue;
}
}
//如你给出的地址可以这样
var classid = request("classid");
var id = request("id");
//然后你就可以对这些参数处理了
</script>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13368884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存