用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陷阱清单
May 31 Javascript
js 屏蔽鼠标右键脚本附破解方法
Dec 03 Javascript
按Enter键触发事件的jquery方法实现代码
Feb 17 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
Node.js返回JSONP详解
May 18 Javascript
angularjs实现下拉列表的选中事件示例
Mar 03 Javascript
layui table 多行删除(id获取)的方法
Sep 12 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
详解Vue的sync修饰符
May 15 Vue.js
验证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
摩卡咖啡
2021/03/03 咖啡文化
php循环输出数据库内容的代码
2008/05/24 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
JS高级笔记
2011/07/13 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
jquery编写日期选择器
2017/03/16 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
BootStrap的两种模态框方式
2017/05/10 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中实现结构相似的函数调用方法
2015/03/10 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
Python列表推导式实现代码实例
2020/09/09 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
介绍一下Make? 为什么使用make
2016/07/31 面试题
新春寄语大全
2014/04/09 职场文书
婚庆主持词大全
2015/06/30 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
创业计划书之宠物店
2019/09/19 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS