用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的滑动样例代码
Nov 20 Javascript
js jquery数组介绍
Jul 15 Javascript
Underscore.js 的模板功能介绍与应用
Dec 24 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
Jun 27 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
Jan 23 Javascript
浅析javascript函数表达式
Feb 10 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
vue项目中锚点定位替代方式
Nov 13 Javascript
vant实现购物车功能
Jun 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更快的提供文件下载的代码
2012/06/13 PHP
三种php连接access数据库方法
2013/11/11 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
js轮播图代码分享
2016/07/14 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
JS代码实现页面切换效果
2021/01/10 Javascript
Python isinstance判断对象类型
2008/09/06 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
售后服务承诺书范文
2014/03/26 职场文书
交通志愿者活动总结
2014/06/27 职场文书
迁户口计划生育证明
2014/10/19 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技
mysql查看表结构的三种方法总结
2022/07/07 MySQL