用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简单实现交换Li的值
May 22 Javascript
初识Node.js
Mar 20 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
JavaScript reduce和reduceRight详解
Oct 24 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 jQuery
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
Vue 过滤器filters及基本用法
Dec 26 Javascript
JavaScript实现微信号随机切换代码
Mar 09 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
解决layer弹出层msg的文字不显示的问题
Sep 11 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
留言板翻页的实现详解
2006/10/09 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
Cython 三分钟入门教程
2009/09/17 Python
python正则表达式之作业计算器
2016/03/18 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
python模块导入的方法
2019/10/24 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
公司给客户的感谢信
2015/01/23 职场文书
爱国主义影片观后感
2015/06/18 职场文书
董事会决议范本
2015/07/01 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书