用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 相关文章推荐
用于table内容排序
Jul 21 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
node.js中的fs.unlinkSync方法使用说明
Dec 15 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
Jul 14 Javascript
深入理解jQuery layui分页控件的使用
Aug 17 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
详解JavaScript调用栈、尾递归和手动优化
Jun 03 Javascript
Vue.js实现微信过渡动画左右切换效果
Jun 13 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 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 归并排序 数组交集
2011/05/10 PHP
浅谈PHP封装CURL
2019/03/06 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
JavaScript中的类继承
2010/11/25 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
在Python中操作字典之update()方法的使用
2015/05/22 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python之列表的插入&amp;替换修改方法
2018/06/28 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python实现图片插入文字
2019/11/26 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
办理暂住证介绍信
2014/01/11 职场文书
党组织公开承诺书
2014/03/29 职场文书
小学二年级学生评语
2014/04/21 职场文书
保护环境建议书300字
2014/05/13 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
入党自荐书范文
2015/03/05 职场文书
Java使用Unsafe类的示例详解
2021/09/25 Java/Android