用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 相关文章推荐
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
jquery 按钮状态效果 正常、移上、按下
Aug 12 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
jQuery内部原理和实现方式浅析
Feb 03 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
Aug 07 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
Aug 01 Javascript
浅谈Vue 初始化性能优化
Aug 31 Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
javascript的setTimeout()使用方法总结
Nov 20 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 购物车实例(申精)
2009/05/11 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
js实现选项卡效果
2020/03/07 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
python树莓派红外反射传感器
2019/01/21 Python
django的settings中设置中文支持的实现
2019/04/28 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
python super用法及原理详解
2020/01/20 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
《识字五》教学反思
2014/03/01 职场文书
军训教官感言
2014/03/02 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
酒店开业策划方案
2014/06/02 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
Redis Lua脚本实现ip限流示例
2022/07/15 Redis