用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 相关文章推荐
认识延迟时间为0的setTimeout
May 16 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
JavaScript之Object类型介绍
Apr 01 Javascript
JS全局变量和局部变量最新解析
Jun 24 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
Dec 27 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
简述JS控制台的使用
Jul 15 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
Sep 26 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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
php smarty的预保留变量总结
2008/12/04 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
python的faker库用法
2019/11/28 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
python集合的新增元素方法整理
2020/12/07 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
季度思想汇报
2014/01/01 职场文书
《乌塔》教学反思
2014/02/17 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
创先争优承诺书
2015/01/20 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
中学语文教学反思
2016/02/16 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书