用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 相关文章推荐
js window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
JavaScript拆分字符串时产生空字符的解决方案
Sep 26 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
Mar 18 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
Aug 21 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
Vue.js实现tab切换效果
Jul 24 Javascript
countUp.js实现数字滚动效果
Oct 18 Javascript
vue cli3适配所有端方案的实现
Apr 13 Javascript
JS实现多功能计算器
Oct 28 Javascript
微信小程序实现单个或多个倒计时功能
Nov 01 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中的错误处理、异常处理机制分析
2012/05/07 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP将两个关联数组合并函数提高函数效率
2014/03/18 PHP
详谈PHP编码转换问题
2015/07/28 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
Python中的推导式使用详解
2015/06/03 Python
python+Django+apache的配置方法详解
2016/06/01 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
Python之字典添加元素的几种方法
2020/09/30 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
24岁生日感言
2014/01/13 职场文书
投资建议书模板
2014/05/12 职场文书
林肯就职演讲稿
2014/05/19 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
仰望星空观后感
2015/06/10 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记