用apply让javascript函数仅执行一次的代码


Posted in Javascript onJune 27, 2010
var obj = new Object(); 
obj.triggerOnce = function(fn) { //控制让函数只触发一次 
return function() { 
try { 
fn.apply(this, arguments); 
} 
catch (e) { 
var txt = "There was an error on this page.\n\n"; 
txt += "Error message: " + e.message + "\n\n"; 
txt += "Error name: " + e.name + "\n\n"; 
//alert(txt);//正式平台上可能需要注释掉该行 
} 
finally { 
fn = null; 
} 
} 
}

调用形式:
function showMsg(arg){ 
alert(arg); 
} 
var fn=obj.triggerOnce(showMsg); 
fn(1);//只执行一次 
fn(2);//没有调用fn

最后,关于javascript的apply方法,您可以简单参考这篇旧文。
【外一篇】用javascript取得querystring的值
在常见的网站中,经常碰到有“XXXX.aspx?username=jeffwong&address=北京” 这种形式的url,通过asp.net的Request对象获取键值轻而易举,通过js也不是很难,用下面的函数就可以搞定了:
代码
var urlStrs = location.search; //QueryString 
var Request = {}; 
Request.Count = 0; 
Request.Add = function(name, value) { 
if (Request.hasOwnProperty(name) == false) { 
Request.Count++; //如果不存在,计数添加1 
} 
Request[name] = value; 
return true; 
} 
Request.QueryString = function(name) {//取对应的键值 
var key = name.toString().toLocaleLowerCase(); //不区分大小写 
var result = null; 
try { 
// if (Request.hasOwnProperty(key)) { 
result = Request[key]; 
// } 
} 
catch (e) { 
//alert(e.message); 
} 
return result; 
} 
Request.Init = function(urlQueryString) { 
if (urlQueryString.indexOf("?") != -1) { 
var url = urlQueryString.substr(1) 
var strArr = url.split("&"); 
for (var i = 0; i < strArr.length; i++) { 
var strChildArr = strArr[i].split("="); 
var name = String(strChildArr[0]).toLowerCase(); 
var value = unescape(strChildArr[1]); //unescape解码 
this.Add(name, value); //添加 
} 
} 
}

测试函数如下:
代码
//测试函数 
function test() { 
Request.Init(urlStrs); //初始化request 
alert(Request.Count); 
var name = "username"; 
var value = Request.QueryString(name); 
alert(Request[name]); 
alert(Request.QueryString(name)); 
name = "address" 
alert(Request[name]); 
alert(Request.QueryString(name)); 
name = "age"; 
alert(Request[name]); 
alert(Request.QueryString(name)); 
}

需要说明的是,url里的参数通常都会有编码,本文采用的是比较常用的unescape进行解码,实际上,关于url参数编码,通常有escape,encodeURIComponent和encodeURI这三种编码函数,escape是window对象的内置函数,而另外两种则是javascript内置函数,它们解码的函数也是一一对应的关系(您可以参考这一篇),各自对应的反转函数分别是unescape,decodeURIComponent和decodeURI。
作者:Jeff Wong
Javascript 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
jquery实现网站超链接和图片提示效果
Mar 21 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
EasyUI加载完Html内容样式渲染完成后显示
Jul 25 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 Javascript
js实现九宫格布局效果
May 28 Javascript
验证javascript中Object和Function的关系的三段简单代码
Jun 27 #Javascript
jQuery选择头像并实时显示的代码
Jun 27 #Javascript
Javascript匿名函数的一种应用 代码封装
Jun 27 #Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 #Javascript
让IE6支持min-width和max-width的方法
Jun 25 #Javascript
jQuery与其它库冲突的解决方法
Jun 25 #Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 #Javascript
You might like
Yii2中datetime类的使用
2016/12/17 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
javascript中获取选中对象的类型
2007/04/02 Javascript
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
Javascript window对象详解
2014/11/12 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
django项目搭建与Session使用详解
2018/10/10 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
学生党员思想汇报
2013/12/28 职场文书
大学生思想汇报范文
2013/12/31 职场文书
迟到检讨书5000字
2014/01/31 职场文书
2014年关于两会精神的心得体会
2014/03/17 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
初中英语教学反思范文
2016/02/15 职场文书