用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 相关文章推荐
javascript 面向对象编程基础:封装
Aug 21 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
JavaScript AOP编程实例
Jun 16 Javascript
D3.js实现折线图的方法详解
Sep 21 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
Dec 08 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
vue实现自定义多选与单选的答题功能
Jul 05 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
Apr 23 Javascript
简单了解vue.js数组的常用操作
Jun 17 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
用cookies来跟踪识别用户
2006/10/09 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python修改MP3文件的方法
2015/06/15 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python正则中最短匹配实现代码
2018/01/16 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
python递归实现快速排序
2018/08/18 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
构建高效的python requests长连接池详解
2020/05/02 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
大学自我评价
2014/02/12 职场文书
幼儿园课题方案
2014/06/09 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL