用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 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
javascript的trim,ltrim,rtrim自定义函数
Sep 21 Javascript
基于jquery的tab切换 js原理
Apr 01 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
jQuery异步提交表单的两种方式
Sep 13 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
vuejs如何配置less
Apr 25 Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
JS使用正则表达式找出最长连续子串长度
Oct 26 Javascript
基于vue2实现左滑删除功能
Nov 28 Javascript
vue-devtools的安装和使用步骤详解
Oct 17 Javascript
浅析vue中的nextTick
Dec 28 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
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
php数组指针操作详解
2017/02/14 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JavaScript多线程详解
2015/08/12 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
python join方法使用详解
2019/07/30 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
简单了解python数组的基本操作
2019/11/26 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
大学运动会通讯稿
2014/01/28 职场文书
职业生涯规划书范文
2014/03/10 职场文书
委托公证书范本
2014/04/03 职场文书
竞聘自述材料
2014/08/25 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
员工教育培训协议书
2014/09/27 职场文书
六五普法宣传标语
2014/10/06 职场文书
2015年大学生工作总结
2015/04/21 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书